Umbau des Ergebnisses

danschna

Benutzer
Beiträge
17
Hallo zusammen, ich habe eine Abfrage, die folgendes Ergebnis liefert (siehe angehängte Datei):
Ich hätte gerne folgende Darstellung:

gescaheftsstelle | anzahl_ereigniswertung_1 | anzahl_ereigniswertung_2 | anzahl_ereigniswertung_3 | anzahl_kunden
01 | 50 | 1 | 12 | 6426

Ich möchte quasi pro geschaefsstelle nur einen Datensatz erzeugen
Kann mir jemand helfen?
 

Anhänge

  • example.jpg
    example.jpg
    62,9 KB · Aufrufe: 5
Werbung:
Sind es immer genau drei Auswertungen?
Und was ist wenn die Anzahl der Kunden unterschiedlich ist für die drei Datensätze?
 
Das Problem ist unter dem Namen "Pivot" oder "Crosstab" bekannt - nicht etwas in dem SQL stark ist. Das grundlegende Problem dabei ist, dass die Anzahl der Spalten einer Abfrage vor dem Ausführen der Abfrage bekannt sein muss.

Wenn es eine (sinnvolle) Obergrenze gibt kann man das mit "bedingter Aggregierung" lösen, z.B. so:

Code:
select geschaeftsstelle,
       max(anzahl_hinweise) filter (where ereigniswertung = 1) as anzahl_ereigniswertung_1,
       max(anzahl_hinweise) filter (where ereigniswertung = 2) as anzahl_ereigniswertung_2,
       max(anzahl_hinweise) filter (where ereigniswertung = 3) as anzahl_ereigniswertung_3,
       max(anzahl_kunden) as anzahl_kunden
from ereignisse
group by geschaeftsstelle
order by geschaeftsstelle;

Wenn noch eine 4. Ereigniswertung dazukommt muss man halt das mit dem max() filter (...) für den Wert 4 wiederholen.

Online Beispiel: crosstab, PostgreSQL - rextester
 
Werbung:
Zurück
Oben