CASE-Ausdruck

CASE ermöglichen die Auswahl eines Ausdrucks auf der Basis der Auswertung einer oder mehrerer Bedingungen.

case-expression
Read syntax diagramSkip visual syntax diagramCASEsearched-when-clausesimple-when-clauseELSE NULLELSEresult-expressionEND1
searched-when-clause
Read syntax diagramSkip visual syntax diagramWHENsearch-conditionTHENresult-expressionNULL
simple-when-clause
Read syntax diagramSkip visual syntax diagramexpression WHENexpressionTHENresult-expressionNULL
Notes:
  • 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.

Tabelle 1. Äquivalente CASE -Ausdrücke
Ausdruck Äquivalenter Ausdruck
CASE
  WHEN e1=e2 THEN NULL
  ELSE e1
END
NULLIF (e1,e2)
CASE
  WHEN e1 IS NOT NULL THEN e1
  ELSE e2
END
COALESCE (e1,e2)
CASE
  WHEN e1 IS NOT NULL THEN e1
  ELSE COALESCE(e2,...,eN)
END
COALESCE (e1,e2,...,eN)
CASE
  WHEN c1=var1 OR (c1 IS NULL AND var1 IS NULL)
    THEN 'a'
  WHEN c1=var2 OR (c1 IS NULL AND var2 IS NULL)
    THEN 'b'
  ELSE NULL
END
DECODE (c1,var1, 'a ', var2, 'b')