Group by Abfrage Jan-Dez in einer Zeile

danix

Neuer Benutzer
Beiträge
1
Hallo alle zusammen,

ich habe eine Tabelle wie folgt:

Jahr Monat Produkt Menge
2014 01 Cola 5
2014 02 Fanta 3
2014 01 Fanta 5
2014 01 Cola 3

Nun sollte eine Gruppierung und Summierung nach Jahr, Monat und Produkt erfolgen. So weit ist es mit einer group by Abfrage auch kein Problem, ergibt aber folgendes Ergebnis:

2014 01 Cola 8
2014 01 Fanta 5
2014 02 Fanta 3

Ich benötige das Ergebnis aber in einer Zeile, so:

Jahr Produkt Januar Februar März......
2014 Cola 8
2014 Fanta 5 3

Ich habe aktuell keine Idee mehr wie ich das innerhalb der Group by Klausel gruppieren kann. ich hoffe hier kann mir jemand helfen?

Vielen Dank vorab.
Gruß
Daniel
 
Werbung:
Ich benötige das Ergebnis aber in einer Zeile, so:

Jahr Produkt Januar Februar März......
2014 Cola 8
2014 Fanta 5 3


Ich hab das mal hier erklärt: https://www.pg-forum.de/viewtopic.php?f=66&t=4067

In der praktischen Anwendung:

Code:
test=*# select * from danix ;
 jahr | monat | produkt | anzahl
------+-------+---------+--------
 2014 |  1 | cola  |  5
 2014 |  2 | fanta  |  3
 2014 |  1 | fanta  |  5
 2014 |  1 | cola  |  3
(4 rows)

Time: 0,180 ms
test=*# select produkt, sum(case when monat = 1 then anzahl else 0 end) as januar, sum(case when monat = 2 then anzahl else 0 end) as februar, sum(case whenmonat = 3 then anzahl else 0 end) as maerz from danix group by produkt;
 produkt | januar | februar | maerz
---------+--------+---------+-------
 fanta  |  5 |  3 |  0
 cola  |  8 |  0 |  0
(2 rows)

Ohne Beachtung des Jahres.


Andreas
 
Zuletzt bearbeitet:
Werbung:
Was du suchst ist ein PIVOT. In etwa so:
Code:
SELECT    t.*
FROM    (    SELECT    Jahr,
                    Monat,
                    Produkt,
                    sum(Menge) AS Menge
            FROM    tabelle
            GROUP BY Jahr,Monat,Produkt ) t
PIVOT (    sum(t.Menge)
        FOR t.Monat IN ( [01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12] )
) p
 
Zurück
Oben