PDA

View Full Version : Optimierung beim Sql-Case



fpxx
19-05-15, 10:26
Liebes Forum,

das folgende SQL listet in einer Zeile für eine Konto-Nr. eine "Gesamtanzahl" und in Abhängigkeit von einem Statusfeld eine Aufteilung je nach Status an.
Dabei sind 4 Stati explizit; 1 Spalte ist für den "Rest" gedacht.
Diese Rest-Spalte habe ich über "not in" definiert.

Gibt es da eine elegantere Methode; eine Art "Else-Zweig" anstelle des "not in"?

SELECT KontoNr, sum(stanzahl) GESAMT,
Sum(Case When ststatkz = 'S' Then stanzahl Else 0 End) "Davon S",
sum(case when ststatkz = 'T' then stanzahl else 0 end) "Davon T",
sum(case when ststatkz='P' then stanzahl else 0 end) "Davon P",
Sum(Case When ststatkz='E' then stanzahl Else 0 End) "Davon E",
sum(case when ststatkz not in('S', 'T', 'P', 'E') then stanzahl
else 0 end) "Rest" FROM FILENAME where ....


KontoNr Gesamt Davon S Davon T Davon P Davon E Rest
100 24 10 8 4 1 1
110 20 12 0 6 0 2
usw.

Vielen Dank für eure Hilfe.

Fuerchau
19-05-15, 11:33
"else" gibt es nur im case.
SQL kennt nur Ausdrücke je Spalte.
Ein "Else" im Select macht keinen Sinn, da es dann unendliche Möglichkeiten gäbe die aber trotzdem falsch sein können.
So hast du das schon richtig gemacht.

fpxx
19-05-15, 11:42
Danke für die rasche Antwort.