Ang. kummuleret sum

Tags:    databaser

Hej Jeg er ved at lave et program i VB.NET med en tilhørende MS SQL database. Nu skal jeg lave en query, hvor jeg gerne vil have en kollonne ekstra i Databasesettet der angiver den kumulerede sum af en af kollonnerne i databasen. Jeg har indtil videre prøvet med følgende query:

SELECT id, UserID, Dato, Rentedato, Tekst, Belob, Gennemfort, kid,(SELECT SUM(Belob) FROM Transaktioner) AS Saldo,FROM Transaktioner

Men denne accepterer den ikke. Den siger "There was an error parsing the query". Kan i se nogle fejl? Er der andre måder at lave dette på?



9 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
Er der en grund til du ikke bare bruger SUM(Belob) AS Saldo?

Anyways prøv denne:
Fold kodeboks ind/udKode 


Du havde vidst også et , for meget efter saldo



Indlæg senest redigeret d. 14.11.2009 22:13 af Bruger #11386
Hvis man jo lige får varmet tænkeren op før man svarer, så hjælper det jo nok lidt. :)

du kan ikke lave den kombination som du forsøger grundet at flg. give X rækker:
Fold kodeboks ind/udSQL kode 

Mens flg. kun giver én uanset hvordan det gøres:
Fold kodeboks ind/udSQL kode 


Skal du have den akkumuleret sum for hver bruger, kan du ikke få de enkelte transaktioner.
Det eneste der kan virker for en akkumulering for alle brugere bliver flg.:
Fold kodeboks ind/udSQL kode 


Ellers kan du muligvis gøre flg.:
Fold kodeboks ind/udSQL kode 

Så kan du måske fange den kronologiske akkumlering.



Indlæg senest redigeret d. 14.11.2009 22:31 af Bruger #10216
Hvad med uden komma efter Saldo? :)



Hov ups, det var en skrivefejl. Men det ændrer ikke ved noget. Samme fejl kommer.

Hvad med uden komma efter Saldo? :)






Jo, det tænkte jeg også. Men når jeg gør det får jeg følgende fejl:

In aggregate and grouping expressions, the SELECT clause can contain only aggregates and grouping expressions.

Kan man gøre noget ved dette?



Kan du vise hvordan din tabel er sat op? (Helst med hvilke datatyper de forskellige felter er)



Prøv med følgende:

Fold kodeboks ind/udSQL kode 


Når du bruger aggregeringsfunktioner, så skal der grupperes med GROUP BY.

SUM, MAX, MIN, AVG er aggregeringer i SQL.



Hej Michael!

Her var lidt af det jeg skulle bruge - tusind tak :-)

Først prøvede jeg den hvor der bare stod sum(Belob). Denne virkede, men når jeg så afprøvede den gav den et forkert resultat. hvis jeg f.eks. indtaster to rækker, en med Belob = 100 og en med Belob = 200, så skulle Saldo jo gerne give 100 og 300. Men den giver bare 100 og 200, så den gentager sådan set bare Belob. Hvad kan der være galt her.
Den anvendte Querystring ser således ud:

SELECT id, UserID, Dato, Rentedato, Tekst, Belob, Gennemfort, kid, SUM(Belob) AS Saldo
FROM Transaktioner
GROUP BY id, UserID, Dato, Rentedato, Tekst, Belob, Gennemfort, kid

Kan det være fordi jeg skal ændre på min update, insert og delete statement?

Hvis jeg anvender løsningen med (SELECT Sum(belob) As Saldo)... så virker det overhovedet ikke. Den accepterer ikke noget med SELECT inde i en SELECT sætning. Hvad kan der være galt her? Det var faktisk denne jeg helst ville bruge.

Hvis man jo lige får varmet tænkeren op før man svarer, så hjælper det jo nok lidt. :)

du kan ikke lave den kombination som du forsøger grundet at flg. give X rækker:
Fold kodeboks ind/udSQL kode 

Mens flg. kun giver én uanset hvordan det gøres:
Fold kodeboks ind/udSQL kode 


Skal du have den akkumuleret sum for hver bruger, kan du ikke få de enkelte transaktioner.
Det eneste der kan virker for en akkumulering for alle brugere bliver flg.:
Fold kodeboks ind/udSQL kode 


Ellers kan du muligvis gøre flg.:
Fold kodeboks ind/udSQL kode 

Så kan du måske fange den kronologiske akkumlering.




Har du kigget på den sidste Query som Michael har lagt ind? Det burde være muligt at skrive en select inde i en anden select, du husker vel bare at der skal være GROUP BY når du bruger sum.



t