CASE
Abfragen verfeinern
Mit CASE bringst du Wenn-Dann-Logik direkt in deine Abfrage. Du prüfst Bedingungen der Reihe nach und gibst je nach Treffer einen anderen Wert zurück – ähnlich wie ein if/else in Programmiersprachen.
Syntax
CASE
WHEN Bedingung1 THEN Ergebnis1
WHEN Bedingung2 THEN Ergebnis2
ELSE Standardwert
END
Die WHEN-Zweige werden von oben nach unten geprüft; der erste passende gewinnt. ELSE ist optional – fehlt es und passt nichts, kommt NULL heraus.
Beispiel: Kunden nach Umsatz einstufen
SELECT Name, Umsatz,
CASE
WHEN Umsatz >= 75000 THEN 'Gold'
WHEN Umsatz >= 40000 THEN 'Silber'
ELSE 'Bronze'
END AS Stufe
FROM Kunden;
| Name | Umsatz | Stufe |
|---|---|---|
| Müller GmbH | 98000 | Gold |
| Weber KG | 61200 | Silber |
| Klein OHG | 12000 | Bronze |
Kurzform: einfacher CASE
Vergleichst du immer dieselbe Spalte mit festen Werten, gibt es eine kompaktere Variante:
SELECT Produktname,
CASE Kategorie
WHEN 'A' THEN 'Büro'
WHEN 'B' THEN 'Technik'
ELSE 'Sonstiges'
END AS Bereich
FROM Produkte;
CASE in ORDER BY
CASE darf fast überall stehen, auch beim Sortieren – etwa um eine eigene Reihenfolge zu erzwingen:
ORDER BY CASE Stadt WHEN 'Berlin' THEN 1 ELSE 2 END;
Stolperfalle
Alle THEN- und ELSE-Werte sollten denselben Datentyp haben – mischst du etwa Zahl und Text, kann es zu Konvertierungsfehlern kommen. Denk außerdem an END: Es schließt jeden CASE-Ausdruck ab; vergisst du es, gibt es einen Syntaxfehler.