Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Group by Abfrage Jan-Dez in einer Zeile

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von danix, 25 Februar 2014.

  1. danix

    danix Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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: 25 Februar 2014
  3. ukulele

    ukulele Datenbank-Guru

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden