Inhalte fallweise in Spalten verschieben

derhenry

Fleissiger Benutzer
Beiträge
54
Hallo zusammen,

ich habe eine Tabelle mit dieser Struktur:
Jahr | System | Anzahl
2010 | A | 10
2011 | A | 8
2012 | A | 7
2013 | A | 6
2010 | B | 5
2011 | B | 9
2012 | B | 10
2013 | B | 9

Und möchte gerne folgendes Ergebnis haben:
Jahr | System A | System B
2010 | 10 | 5
2011 | 8 | 9
2012 | 7 | 10
2013 | 6 | 9

Wie bekomme ich das mit SQL hin?
Danke und Grüße
 
Werbung:
Code:
test=*# select * from henry ;
 jahr | system | anzahl
------+--------+--------
 2010 | a  |  10
 2011 | a  |  8
 2012 | a  |  7
 2010 | b  |  5
 2011 | b  |  9
 2012 | b  |  10
 2013 | b  |  9
 2013 | a  |  6
(8 rows)

test=*# select jahr, sum(anzahl) filter (where system='a'), sum(anzahl) filter (where system='b') from henry group by jahr order by jahr;
 jahr | sum | sum
------+-----+-----
 2010 |  10 |  5
 2011 |  8 |  9
 2012 |  7 |  10
 2013 |  6 |  9
(4 rows)

Falls filter (...) nicht geht mit case when ... nachbauen.
 
also so:

Code:
test=*# select jahr, sum(case when system='a' then anzahl else 0 end) as a, sum(case when system='b' then anzahl else 0 end) as b from henry group by jahr order by jahr;
 jahr | a  | b
------+----+----
 2010 | 10 |  5
 2011 |  8 |  9
 2012 |  7 | 10
 2013 |  6 |  9
(4 rows)
 
Hallo Leute,

vielen Dank für die Antworten. Mit dem Case habe ich es jetzt hinbekommen.
Das mit der Filter-Funktion kannte ich nicht. Pivot kann meine Datenbank nicht und den zweiten Weg vonDistrilec verstehe ich nicht. :)

Grüße!
 
Werbung:
Zurück
Oben