CASE-Ausdruck
CASE ermöglichen die Auswahl eines Ausdrucks auf der Basis der Auswertung einer oder mehrerer Bedingungen.
- 1 If the result type of result-expression is a row type, then the syntax represents a row-case-expression and can only be used where a row-expression is allowed.
Im Allgemeinen ist der Wert von case-expression der Wert des Ergebnisausdrucks nach dem ersten (ganz links) Fall, der als wahr ausgewertet wird. Wenn kein Fall mit 'true' ausgewertet wird und das Schlüsselwort ELSE vorhanden ist, ist das Ergebnis der Wert des Ergebnisausdrucks oder NULL. Wenn kein Fall als wahr ausgewertet wird und das Schlüsselwort ELSE nicht vorhanden ist, ist das Ergebnis NULL. Beachten Sie, dass ein Fall, wenn er als unbekannt ausgewertet wird (aufgrund von Nullwerten), nicht wahr ist und daher genauso behandelt wird wie ein Fall, der als falsch ausgewertet wird.
Wenn der Ausdruck CASE in einer Klausel VALUES, einem Vergleichselement IN, einer Klausel GROUP BY oder einer Klausel ORDER BY enthalten ist, kann die Suchbedingung in einer Klausel 'search-when' kein quantifiziertes Vergleichselement, Vergleichselement IN mit einem Fullselect oder Vergleichselement EXISTS (SQLSTATE 42625) sein.
Bei Verwendung der simple-when-Klauselwird der Wert des Ausdrucks vor dem ersten Schlüsselwort WHEN auf Gleichheit mit dem Wert des Ausdrucks nach dem Schlüsselwort WHEN getestet. Der Datentyp des Ausdrucks vor dem ersten Schlüsselwort WHEN muss daher mit den Datentypen jedes Ausdrucks nach dem Schlüsselwort/den Schlüsselwörtern WHEN vergleichbar sein. Der Ausdruck vor dem ersten Schlüsselwort WHEN in einer simple-when-Klausel kann keine Funktion enthalten, die nicht deterministisch ist oder eine externe Aktion hat (SQLSTATE 42845).
Ein Ergebnisausdruck ist ein Ausdruck nach dem Schlüsselwort THEN oder ELSE. Es muss mindestens ein Ergebnisausdruck im Ausdruck CASE vorhanden sein (NULL kann nicht für jeden Fall angegeben werden) (SQLSTATE-Wert 42625). Alle Ergebnisausdrücke müssen kompatible Datentypen haben (SQLSTATE 42804).
Beispiele
- Wenn das erste Zeichen einer Abteilungsnummer ein Unternehmensbereich in der Organisation ist, kann ein Ausdruck CASE verwendet werden, um den vollständigen Namen des Unternehmensbereichs aufzulisten, zu dem jeder Mitarbeiter gehört:
SELECT EMPNO, LASTNAME, CASE SUBSTR(WORKDEPT,1,1) WHEN 'A' THEN 'Administration' WHEN 'B' THEN 'Human Resources' WHEN 'C' THEN 'Accounting' WHEN 'D' THEN 'Design' WHEN 'E' THEN 'Operations' END FROM EMPLOYEE; - Die Anzahl der Ausbildungsjahre wird in der Tabelle EMPLOYEE verwendet, um das Bildungsniveau anzugeben. Ein Ausdruck CASE kann verwendet werden, um diese zu gruppieren und das Bildungsniveau anzuzeigen.
SELECT EMPNO, FIRSTNME, MIDINIT, LASTNAME, CASE WHEN EDLEVEL < 15 THEN 'SECONDARY' WHEN EDLEVEL < 19 THEN 'COLLEGE' ELSE 'POST GRADUATE' END FROM EMPLOYEE - Ein weiteres interessantes Beispiel für die Verwendung von CASE -Anweisungen ist der Schutz vor der Division durch 0 Fehler. Der folgende Code ermittelt beispielsweise die Mitarbeiter, die mehr als 25% ihres Einkommens aus Provisionen verdienen, aber nicht vollständig auf Provisionen bezahlt werden:
SELECT EMPNO, WORKDEPT, SALARY+COMM FROM EMPLOYEE WHERE (CASE WHEN SALARY=0 THEN NULL ELSE COMM/SALARY END) > 0.25; - Die folgenden CASE -Ausdrücke sind identisch:
SELECT LASTNAME, CASE WHEN LASTNAME = 'Haas' THEN 'President' ... SELECT LASTNAME, CASE LASTNAME WHEN 'Haas' THEN 'President' ...
Es gibt zwei Skalarfunktionen, NULLIF und COALESCE, die auf die Verarbeitung einer Untergruppe der von CASEbereitgestellten Funktionalität spezialisiert sind. Tabelle 1 zeigt die äquivalenten Ausdrücke mit CASE oder diesen Funktionen.
| Ausdruck | Äquivalenter Ausdruck |
|---|---|
|
NULLIF (e1,e2) |
|
COALESCE (e1,e2) |
|
COALESCE (e1,e2,...,eN) |
|
DECODE (c1,var1, 'a ', var2, 'b') |
