Gruppierung

IchHH

Datenbank-Guru
Beiträge
282
Hallo liebe SQL-Freunde,

ich habe ein Problem, dass ich einfach nicht verstehe und nun um eure Unterstüzung bitte.

Ich gebe beispielsweise folgende Information in einer dbo an.

Kontenart Betrag
400 6033,89
403 6566,11
406 14939,27
409 -50,00

dann lasse ich den Code

Code:
Select Concat(kontenart, gruppe) as Kontenart, sum("tmp") as tmp
from
(Select kontenart, substring(kontenart,1,2) as gruppe, "tmp" from dbo.tmp) foo group by grouping sets ((kontenart),(gruppe))

drüberlaufen um neben den dreistelligen Kontenarten auch 2 Stellige zu erzeugen.

Was jedoch rauskommt, sieht dann wie folgt aus:

Kontenart Betrag
40 44766,10
400 37436,15
403 7329,95

Das Ergebnis hat nichts mehr mit dem zutun was ich ursprünglich hatte und verstehe nicht warum das so ist.

Würde mich über Hilfe riesig freuen.

Grüße aus Hamburg
 
Werbung:
was soll denn rauskommen? Sowas?

Code:
test=*# select * from ichhh ;
 kontenart |  betrag  
-----------+----------
 400       |  6033.89
 403       |  6566.11
 406       | 14939.27
 409       |   -50.00
(4 Zeilen)

test=*# select kontenart, gruppe, sum(betrag) from (select kontenart, substring(kontenart,1,2) as gruppe, betrag from ichhh ) tmp group by grouping sets((kontenart),(gruppe));
 kontenart | gruppe |   sum   
-----------+--------+----------
 400       |        |  6033.89
 403       |        |  6566.11
 406       |        | 14939.27
 409       |        |   -50.00
           | 40     | 27489.27
(5 Zeilen)

test=*#
 
Komisch. Wenn ich dein Code benutze kommt noch immer das selbe Problem auf. Irgendwo muss bei mir der Wurm drinnen sein.
 
Code:
test=*# select kontenart, gruppe, sum(betrag) from (select kontenart || substring(kontenart,1,2) as kontenart, substring(kontenart,1,2) as gruppe, betrag from ichhh ) tmp group by grouping sets((kontenart),(gruppe));
 kontenart | gruppe |   sum   
-----------+--------+----------
 40040     |        |  6033.89
 40340     |        |  6566.11
 40640     |        | 14939.27
 40940     |        |   -50.00
           | 40     | 27489.27
(5 Zeilen)

so?
 
Nein ich meinte so:

Code:
kontenart | sum   
-----------+----------
 400       |   6033.89
 403       |   6566.11
 406       | 14939.27
 409       |      -50.00
 40         | 27489.27
 
Warum verwirrst Du dann mit dem GROUPING SET?

Code:
test=*# select kontenart, betrag from ichhh union all select substring(kontenart,1,2), sum(betrag) from ichhh group by 1;
 kontenart |  betrag  
-----------+----------
 400       |  6033.89
 403       |  6566.11
 406       | 14939.27
 409       |   -50.00
 40        | 27489.27
(5 Zeilen)
 
oder:

Code:
test=*# select coalesce(kontenart,gruppe), sum from (select kontenart, gruppe, sum(betrag) from (select kontenart, substring(kontenart,1,2) as gruppe, betrag from ichhh ) tmp group by grouping sets((kontenart),(gruppe))) foo;
 coalesce |   sum   
----------+----------
 400      |  6033.89
 403      |  6566.11
 406      | 14939.27
 409      |   -50.00
 40       | 27489.27
(5 Zeilen)
 
Werbung:
Zurück
Oben