---
title: "Räkna ihop summan av en kolumm i en databas."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/50593-räkna-ihop-summan-av-en-kolumm-i-en-databas"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "trexter.com"
published: "2002-08-17T08:52:34.000Z"
updated: "2003-02-24T15:50:50.000Z"
replies: 16
views: 555
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/50593-räkna-ihop-summan-av-en-kolumm-i-en-databas"
---

# Räkna ihop summan av en kolumm i en databas.

## #1 — trexter.com, 2002-08-17T08:52Z

LarsG gav mig ett litet script innan men tyvärr fick jag ett felmeddelande och tänkte att det nog är lika bra att göra det själv. Jag vill alltså göra så här:

Namn: Bosse
Köpte: En gitarr
Pris: 2000

Namn: Lina
Köpte: En lina :OO
Pris: 20

**Summa: 2020** 

Därför klurade jag upp följande struktur på koden som skulle summera alla "total" i databasen men av någon anledning skrivs inte summa ut, måste vara något fel i tankesättet....

```
<%
' Databaskoppling
' RecordSet som hämtar namn och lite sådant
Summa = 0
Do Until RecSet.EOF
total = RecSet("total")
Summa = Summa + total
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa
%>
```

 :)

Permalänk: https://www.webforum.nu/p/50593

## #2 — @nders, 2002-08-17T08:56Z

Hur ser koden LarsG gav dig ut?

Jag hade gjort det med en enkel select-fråga i stället för att loopa och krångla.

```
strSQL = "SELECT Sum(prisfältet) AS Prissumma FROM tabellen"
set objRS = objConn.Execute(strSQL)
dblSum = CDbl(objRS("Prissumma"))
```

Mvh,

Permalänk: https://www.webforum.nu/p/755288

## #3 — trexter.com, 2002-08-17T09:08Z

Så här såg hans inlägg ut:

"Hur vill du ha det om samma person har köpt flera (olika) saker? 

Hur som helst så är det enklast att summera i VB-script då du går igenom alla poster. 

```
q = "select * from t where orderdate between ... order by name"
set rs = connect.execute(q)
totper = 0.0
totall = 0.0
p = ""
while not rs.eof
if  p<> "" and p <> rs("name") then
   if totper <> 0.0 then response.write totper & "<br><br>"
   p = rs("namn")
   response.write p & "<br>"
   totper = 0.0
end if
  'övrig info
  totall = totall + cdbl(rs("kostnad"))
  totper = totperl + cdbl(rs("kostnad"))
 rs.movenext
wend
if totper <> 0.0 then response.write totper & "<br><br>"
if totall <> 0.0 then response.write "Alla" & totper & "<br><br>"
```

Du får frilla till det lite."

... och jag måste säga att det nästan är lite för komplicerad för min smak. 

Men saken är ju den att om jag använder din metod @nders (som jag också själv trodde att jag skulle bli föreslagen), så måste jag ju ha två RecordSet...

 :)

Permalänk: https://www.webforum.nu/p/755295

## #4 — @nders, 2002-08-17T09:12Z

Japp. 

Jag missade att du skrev ut andra saker i din kod också, eftersom du tagit bort själva koden. Så jag fick för mig att det var det enda du ville göra. :-)

Då gör vi så här i stället. Du är inne på rätt spår med din kod, men du måste alltid se till att subtypskonvertera, så du lägger ihop tal som verkligen är tal. Det här borde fungera:

```
<%
' Databaskoppling
' RecordSet som hämtar namn och lite sådant
Summa = 0
Do Until RecSet.EOF
Summa = Summa + Cdbl(RecSet("fältet"))
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa
%>
```

På vilket sätt fungerade det inte tidigare?
Jag använde Cdbl() i koden för att typkonvertera till decimaltal.

Mvh,

Permalänk: https://www.webforum.nu/p/755297

## #5 — trexter.com, 2002-08-17T09:17Z

Invalid use of Null: 'Cdbl'  :l

Permalänk: https://www.webforum.nu/p/755298

## #6 — @nders, 2002-08-17T09:22Z

Har du null i talfältet? Ha inte det. Se till att det står 0 istället.

Annars:

```
<%
' Databaskoppling
' RecordSet som hämtar namn och lite sådant
Summa = 0
Do Until RecSet.EOF
[b]If not IsNull(RecSet("fältet")) Then
    Summa = Summa + Cdbl(RecSet("fältet"))
End if[/b]
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa
%>
```

Mvh,

Permalänk: https://www.webforum.nu/p/755299

## #7 — trexter.com, 2002-08-17T09:25Z

Hmm.. var ändrar jag det (svenskt Access 2000)?
total är av typen valuta...

  :q

Permalänk: https://www.webforum.nu/p/755303

## #8 — @nders, 2002-08-17T09:27Z

Ändra och ändra... Se till att dina poster har värdet 0 istället för null...

Du kan ju lägga in 0 som standardvärde på fältet också.

Mvh,

Permalänk: https://www.webforum.nu/p/755304

## #9 — trexter.com, 2002-08-17T09:32Z

Kanon, det fungerar faktiskt, det var bara en post i databasen som bråkade. Då var jag ju faktiskt inte så där \_fruktansvärt\_ långt ifrån i alla fall. :)

Men en sak... det där med Cdbl. Jag förstår inte riktigt när man använder...

 :)

Permalänk: https://www.webforum.nu/p/755308

## #10 — @nders, 2002-08-17T09:41Z

I ASP / VbScript finns inga egentliga datatyper, utan alla variabler är av typen variant. Dock finns en hel del subtyper. För att du ska kunna använda talfunktioner på tal, och strängfunktioner på strängar, och datumfunktioner på datum, måste du se till att värdet är av rätt subtyp.

CDbl() - Konverterar någonting till en *double*, ett decimaltal (kan vara riktigt stort)
CSng() - Konverterar någonting till en *single*, ett decimaltal, inte lika stort som double.
CStr() - Konverterar till sträng
CDate() - Konverterar till datumtyp
CBool() - Konverterar ett värde till boolean, dvs true/false
CInt() - Konverterar till integer (heltal) (Dock max 32768, så vid stora tal, se nedan)
CLng() - Konverterar till long (heltal), kan vara attans stort.

Det finns säkert fler jag inte hade i hjärnan just nu, men konsultera <http://msdn.microsoft.com/scripting/> .

Kom ihåg att du inte kan använda konverteringsfunktionerna på nullvärden, utan endast värden som verkligen kan konverteras till den typen. 

Mvh,

Permalänk: https://www.webforum.nu/p/755313

## #11 — trexter.com, 2002-08-17T09:49Z

Tack!  :bire

Permalänk: https://www.webforum.nu/p/755322

## #12 — Bj, 2003-02-24T13:45Z

Testade nedanstående kod med lyckat resultat, men om man vill summera fler fält, hur skall man då gå tillväga? Har testat på olika sätt men inte lyckats.

```
<%
' Databaskoppling
' RecordSet som hämtar namn och lite sådant
Summa_1 = 0
Do Until RecSet.EOF
If not IsNull(RecSet("fältet_1")) Then
    Summa_1 = Summa_1 + Cdbl(RecSet("fältet_1"))
End if
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa_1
%>
```

Permalänk: https://www.webforum.nu/p/959980

## #13 — LarsG, 2003-02-24T14:07Z

Vill du ha en summa för allt eller vill du ha olika summor?

Permalänk: https://www.webforum.nu/p/959999

## #14 — Bj, 2003-02-24T14:21Z

Olika summor..
Fick fram 2 stycken olika på följande sätt, men när jag lägger till de jag nedan tagit bort så blir resultaten fel.

```
Summa_hm = 0
Summa_bm = 0
'Summa_bu = 0

Do Until RecSet.EOF
If not IsNull(RecSet("hm")) AND (RecSet("bm")) Then
'If not IsNull(RecSet("hm")) AND (RecSet("bm")) AND (RecSet("bu")) Then
    Summa_hm = Summa_hm + Cdbl(RecSet("hm"))
    Summa_bm = Summa_bm + Cdbl(RecSet("bm"))
    'Summa_bu = Summa_bu + Cdbl(RecSet("bu"))
End if

' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa_hm
Response.Write "-"
Response.Write Summa_bm
'Response.Write "-"
'Response.Write Summa_bu
```

Permalänk: https://www.webforum.nu/p/960015

## #15 — LarsG, 2003-02-24T14:26Z

Du får kolla varje kolumn för sig.

```
If not IsNull(RecSet("hm"))  Then
    Summa_hm = Summa_hm + Cdbl(RecSet("hm")) 
End if
If not IsNull(RecSet("bm"))  Then
    Summa_bm = Summa_bm + Cdbl(RecSet("bm")) 
End if
```

Permalänk: https://www.webforum.nu/p/960022

## #16 — Bj, 2003-02-24T14:35Z

Tackar!!!!

Permalänk: https://www.webforum.nu/p/960031

## #17 — trexter, 2003-02-24T15:50Z

Wee... inte för att jag har något vettigt att säga men visst är det en viss känsla att svara på det man själv skrivit för typ ett halvår sedan!

trexter.com \> Hoppas allt löste sig och lycka till i framtiden!

 :)

Permalänk: https://www.webforum.nu/p/960116

---

Tråden på webben: https://www.webforum.nu/amne/asp/50593-räkna-ihop-summan-av-en-kolumm-i-en-databas
