ab Oracle 8i:
Aufbau:
CASE WHEN {test} THEN {code} [WHEN {test}] [THEN...] [ELSE...] END
1. Beispiel:
select .... , ( case when ampel = 'grün' then 'green' when ampel = 'rot' then 'red' else 'yellow' end ) as ampel from ......
ab Oracle 9i:
Aufbau:
CASE {VALUE oder expression} WHEN {match = TRUE} THEN {code} [WHEN...] [THEN...] [ELSE...] => immer NULL wenn nicht definiert und kein WHEN Zweig getroffen \\ END
2. Beispiel
SELECT .... , ( CASE ampel WHEN 'grün' THEN 'green' WHEN 'rot' THEN 'red' ELSE 'yellow' END ) AS ampel FROM ......
SELECT status FROM ampeln WHERE ( CASE ampel WHEN 'grün' THEN 1 WHEN 'rot' THEN 0 ELSE 1 END ) = 1
findet alle bis auf die gelben Ampeln
Da in der Test Bedingung auch komplexes Vergleiche möglich sind, können so Daten in Cluster zerlegt werden.
Einfaches Beispiel:
SELECT * FROM ampeln ORDER BY ( CASE ampel WHEN 'grün' THEN 1 WHEN 'rot' THEN 2 ELSE 3 END )
Immer darauf achten das auch wirklich jeder Case Abschnitt erreicht werden kann, bzw. immer einen ELSE Zweig in die Logik einbauen!
Oracle 12c - Database PL/SQL Language Reference ⇒ https://docs.oracle.com/database/121/LNPLS/case_statement.htm#LNPLS01304