Avatar billede vagn16 Nybegynder
26. november 2005 - 10:38 Der er 18 kommentarer og
2 løsninger

Lægge tal sammen?

Hej,

Jeg har en tabel med grain1, grain2, grain3, grain4, og grain5.

Jeg vil gerne lægge de værdier sammen der ikke er lig 0.

Jeg ved ikke om jeg skal gøre det via min sql?

Jeg har lavet et loop:

lpcontrol = 0
strTal = 1
do while (lpcontrol <= 4)
   
            strGrain = RS1.Fields("grain" & strTal).Value
           
            IF strGrain <> "0" Then
           
            'strGrain = "strGrain" & strTal
           
            strGrain = CDbl(strGrain)
           
            strSum = strSum + strGrain
           
            END IF                       
           
lpcontrol = lpcontrol + 1
strTal = strTal + 1
loop

Men kan ikke oprette en streng ala:

"strSum" & strTal så jeg kan skille dem fra hinanden?

Hvad skal jeg gøre?

Pelle
Avatar billede nielle Nybegynder
26. november 2005 - 10:51 #1
Du kan da bare lægge dem alle sdammen sammen - dem som er 0 bidrager jo ikke til summen på nogen måde.
Avatar billede nielle Nybegynder
26. november 2005 - 10:53 #2
lpcontrol = 0
strTal = 1
Do While (lpcontrol <= 4)
    strGrain = RS1.Fields("grain" & strTal).Value

    strGrain = CDbl(strGrain)
    strSum = strSum + strGrain
           
    lpcontrol = lpcontrol + 1
    strTal = strTal + 1
Loop
Avatar billede nielle Nybegynder
26. november 2005 - 10:55 #3
... men jeg er ikke sikker på hvad det er du øsnker at kunne gøre mht. din:

strGrain = "strGrain" & strTal

Kan du forklare lidt mere? Evt. med nogle eksempler.
Avatar billede eagleeye Praktikant
26. november 2005 - 11:14 #4
du kan også ligge dem sammen i din SQL sætning:

SQL = "select grain1+grain2+grain3+grain4+grain5 as grainSum from tabelnavn"

og så kan du hente summe via recordsetet:

strSum = RS1.Fields("grainSum")
Avatar billede eagleeye Praktikant
26. november 2005 - 11:15 #5
hov glemte .value i sidste linie :)

strSum = RS1.Fields("grainSum").Value
Avatar billede vagn16 Nybegynder
26. november 2005 - 19:21 #6
Hej Begge,

Og tak for hjælpen... der er dog ingen af løsningerne der løser mit problem. Jeg forsøger at beskrive det lidt bedre.

Jeg har en tabel:

ID, navn, flag, grain1, grain2, gran3, grain4, grain5

Her ligger f.eks:

1, Peter, Dansk, 10, 10, 10, 10, 10
2, Morten, Svensk, 5, 5, 5, 5, 5

Det jeg vil have er et output til en tabel der ser sådan ud:

Peter | Dansk | 50
Morten | Svensk | 25

Giver det bedre mening?

Måske skal men lave en SQL der både vælger alle de andre felter (SQL1 = "SELECT * FROM) og så lægger alle de forskellige grain værdier sammen?

Håber i kan løse det nu!

Vh

Pelle

* nielle - det jeg tænkte var at loopet kører værdien for den første record igennem men gemmer dem som strSum og lægger derefter alle de andre ind i samme sum. Hvis jeg kunne lave en "strSum" & strTal (strSum1) så ville jeg få fem forskellige strSum1, strSum2... som ville indeholde hver sin værdi... mn efter jeres svar tror jeg nok at det er smartest at konstruere en vild SQL?!
Avatar billede nielle Nybegynder
26. november 2005 - 19:29 #7
Som eagleeye foreslog kan du lave din sammenregning i selve SQL-kaldet. Din løsning kunne se nogenlunde sådan her ud:

SQL = "SELECT navn, nationalitet, grain1+grain2+grain3+grain4+grain5 AS grainSum FROM tabelnavn"
Set rs = Coon.Execute(SQL)

Do While Not rs.EOF
    Response.Write rs("navn") & " | " & rs("nationalitet") & " | " & rs("grainSum") & "<br>"

    rs.MoveNext
Loop
Avatar billede eagleeye Praktikant
26. november 2005 - 19:30 #8
Så kan du udvide SQL sætnignen sådan her:
SQL = "select id, navn, flag, grain1+grain2+grain3+grain4+grain5 as grainSum from tabelnavn"



Eks på koden som ligger sammen i databsen:

SQL = "select id, navn, flag, grain1+grain2+grain3+grain4+grain5 as grainSum from tabelnavn"

Set rs1 = Conn.Exeute(SQL)
do while not rs1.EOF
  response.write rs1("navn")
  response.write " | "
  response.write rs1("flag")
  response.write " | "
  response.write rs1("grainSum")
  response.write "<br>"
  rs1.movenext
loop
Avatar billede vagn16 Nybegynder
26. november 2005 - 19:38 #9
Kan man sortere på grainSum?

Order by grainSum

- en anden detalje; der er 55 felter i min tabel kan man ikke skrive:

SELECT *, grain1+grain2+grain3+grain4+grain5 as grainSum ??

Det kan man nok ikke? Jeg vil helst ikke skulle skrive alle felterne... men der er måske ingen vej udenom?

Pelle
Avatar billede nielle Nybegynder
26. november 2005 - 19:39 #10
Du kan godt gøre det på den måde der, men så ofre du noget af effektiviteten. Man bør aldrig trække mere ude end det man skal bruge senere.
Avatar billede eagleeye Praktikant
26. november 2005 - 19:40 #11
Hvis det er access så skal man skrive regne stykke igen
Avatar billede eagleeye Praktikant
26. november 2005 - 19:40 #12
Altså:

order by  grain1+grain2+grain3+grain4+grain5 DESC

Nogle andre databasser kan godt sortere på et aliasnavn.
Avatar billede nielle Nybegynder
26. november 2005 - 19:40 #13
Og ja, du kan godt sortere på grainSum.
Avatar billede vagn16 Nybegynder
26. november 2005 - 21:24 #14
Hej begge,

SQL'en gjorde det... den trækker det ud... den sorterer... super!

eagleye.. må jeg smide ti af dine velfortjente point til nielle? han har trods alt brugt noget af sin lørdag aften?

Hvis det er ok så skriv det i dit svar... så kan nielle også lige oprette et!

Takker og bukker!

Pelle
Avatar billede eagleeye Praktikant
26. november 2005 - 23:28 #15
Jeg måtte også lige smutte nogle timer, ja naturligvis må du også give nogle point til nielle :)
Avatar billede nielle Nybegynder
27. november 2005 - 07:19 #16
Jamen, så lægger jeg da et svar :^)
Avatar billede vagn16 Nybegynder
28. november 2005 - 18:57 #17
Tak for hjælpen!
Avatar billede nielle Nybegynder
11. december 2005 - 19:48 #18
Husk nu at acceptere svarene :^)
Avatar billede vagn16 Nybegynder
12. december 2005 - 07:09 #19
Sorry...
Avatar billede nielle Nybegynder
12. december 2005 - 18:01 #20
Det er helt ok :^)

... og takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester