Suche…
Einführung
Der CASE-Ausdruck wird zur Implementierung der If-Then-Logik verwendet.
Syntax
-  CASE input_expression 
 WANN vergleich1, dann Ergebnis1
 [WANN2 DICHTER2 Ergebnis ...] ...
 [ELSE resultX]
 ENDE
-  FALL 
 WENN Bedingung1 DANN Ergebnis1
 [WENN Bedingung2 dann Ergebnis2] ...
 [ELSE resultX]
 ENDE
Bemerkungen
 Der einfache CASE-Ausdruck gibt das erste Ergebnis zurück, dessen compareX Wert dem input_expression . 
 Der gesuchte CASE-Ausdruck gibt das erste Ergebnis zurück, dessen conditionX wahr ist. 
CASE in SELECT gesucht (entspricht einem booleschen Ausdruck)
Das durchsuchte CASE gibt Ergebnisse zurück, wenn ein boolescher Ausdruck TRUE ist.
(Dies unterscheidet sich vom einfachen Fall, der nur bei einer Eingabe die Gleichwertigkeit prüfen kann.)
SELECT Id, ItemId, Price,
  CASE WHEN Price < 10 THEN 'CHEAP'
       WHEN Price < 20 THEN 'AFFORDABLE'
       ELSE 'EXPENSIVE'
  END AS PriceRating
FROM ItemSales
| Ich würde | Artikel Identifikationsnummer | Preis | PreisPreis | 
|---|---|---|---|
| 1 | 100 | 34,5 | TEUER | 
| 2 | 145 | 2.3 | BILLIG | 
| 3 | 100 | 34,5 | TEUER | 
| 4 | 100 | 34,5 | TEUER | 
| 5 | 145 | 10 | ERSCHWINGLICH | 
Mit CASE COUNT die Anzahl der Zeilen in einer Spalte mit einer Bedingung übereinstimmen.
Anwendungsfall
 CASE kann in Verbindung mit SUM , um nur die Elemente zurückzugeben, die mit einer vordefinierten Bedingung übereinstimmen. (Dies ist ähnlich zu COUNTIF in Excel.) 
Der Trick besteht darin, binäre Ergebnisse zurückzugeben, die Übereinstimmungen anzeigen, sodass die für übereinstimmende Einträge zurückgegebenen "1" für einen Zähler der Gesamtanzahl der Übereinstimmungen summiert werden können.
 ItemSales , Sie möchten mit dieser Tabelle ItemSales die Gesamtzahl der als "teuer" eingestuften Artikel ermitteln: 
| Ich würde | Artikel Identifikationsnummer | Preis | PreisPreis | 
|---|---|---|---|
| 1 | 100 | 34,5 | TEUER | 
| 2 | 145 | 2.3 | BILLIG | 
| 3 | 100 | 34,5 | TEUER | 
| 4 | 100 | 34,5 | TEUER | 
| 5 | 145 | 10 | ERSCHWINGLICH | 
Abfrage
SELECT 
    COUNT(Id) AS ItemsCount,
    SUM ( CASE 
            WHEN PriceRating = 'Expensive' THEN 1
            ELSE 0
          END
        ) AS ExpensiveItemsCount
FROM ItemSales 
Ergebnisse:
| ItemsCount | ExpensiveItemsCount | 
|---|---|
| 5 | 3 | 
Alternative:
SELECT 
    COUNT(Id) as ItemsCount,
    SUM (
        CASE PriceRating 
            WHEN 'Expensive' THEN 1
            ELSE 0
        END
       ) AS ExpensiveItemsCount
FROM ItemSales 
Abkürzung CASE in SELECT
 Die Abkürzungsvariante von CASE wertet einen Ausdruck (normalerweise eine Spalte) anhand einer Reihe von Werten aus. Diese Variante ist etwas kürzer und erspart es, den ausgewerteten Ausdruck immer und immer wieder zu wiederholen. Die ELSE Klausel kann jedoch weiterhin verwendet werden: 
SELECT Id, ItemId, Price,
  CASE Price WHEN 5  THEN 'CHEAP'
             WHEN 15 THEN 'AFFORDABLE'
             ELSE         'EXPENSIVE'
  END as PriceRating
FROM ItemSales
 Ein Wort der Warnung. Es ist wichtig zu wissen, dass bei Verwendung der kurzen Variante die gesamte Anweisung bei jedem WHEN ausgewertet wird. Daher die folgende Aussage: 
SELECT 
    CASE ABS(CHECKSUM(NEWID())) % 4
        WHEN 0 THEN 'Dr'
        WHEN 1 THEN 'Master'
        WHEN 2 THEN 'Mr'
        WHEN 3 THEN 'Mrs'
    END
 kann zu einem NULL Ergebnis führen. Das liegt daran , dass bei jeder WHEN NEWID() ist mit einem neuen Ergebnis wieder aufgerufen wird. Gleichwertig: 
SELECT 
    CASE 
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 0 THEN 'Dr'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 1 THEN 'Master'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 2 THEN 'Mr'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 3 THEN 'Mrs'
    END
 Daher kann es alle WHEN Fälle verfehlen und als NULL . 
CASE in einer Klausel ORDER BY
Wir können 1,2,3 verwenden, um die Art der Bestellung zu bestimmen
SELECT * FROM DEPT
ORDER BY
CASE DEPARTMENT
      WHEN 'MARKETING' THEN  1
      WHEN 'SALES' THEN 2
      WHEN 'RESEARCH' THEN 3
      WHEN 'INNOVATION' THEN 4
      ELSE        5
      END,
      CITY
| ICH WÜRDE | REGION | STADT | ABTEILUNG | EMPLOYEES_NUMBER | 
|---|---|---|---|---|
| 12 | Neu England | Boston | MARKETING | 9 | 
| fünfzehn | Westen | San Francisco | MARKETING | 12 | 
| 9 | Mittlerer Westen | Chicago | DER UMSATZ | 8 | 
| 14 | Mid-Atlantic | New York | DER UMSATZ | 12 | 
| 5 | Westen | Los Angeles | FORSCHUNG | 11 | 
| 10 | Mid-Atlantic | Philadelphia | FORSCHUNG | 13 | 
| 4 | Mittlerer Westen | Chicago | INNOVATION | 11 | 
| 2 | Mittlerer Westen | Detroit | HUMANRESSOURCEN | 9 | 
CASE in UPDATE verwenden
Beispiel für Preiserhöhungen:
UPDATE ItemPrice
SET Price = Price *
  CASE ItemId
    WHEN 1 THEN 1.05
    WHEN 2 THEN 1.10
    WHEN 3 THEN 1.15
    ELSE 1.00
  END
CASE-Verwendung für NULL-Werte, die zuletzt bestellt wurden
Auf diese Weise wird die '0', die die bekannten Werte darstellt, an erster Stelle stehen, die '1', die die NULL-Werte darstellt, wird nach dem letzten sortiert:
SELECT ID
      ,REGION
      ,CITY
      ,DEPARTMENT
      ,EMPLOYEES_NUMBER
  FROM DEPT
  ORDER BY 
  CASE WHEN REGION IS NULL THEN 1 
  ELSE 0
  END, 
  REGION
| ICH WÜRDE | REGION | STADT | ABTEILUNG | EMPLOYEES_NUMBER | 
|---|---|---|---|---|
| 10 | Mid-Atlantic | Philadelphia | FORSCHUNG | 13 | 
| 14 | Mid-Atlantic | New York | DER UMSATZ | 12 | 
| 9 | Mittlerer Westen | Chicago | DER UMSATZ | 8 | 
| 12 | Neu England | Boston | MARKETING | 9 | 
| 5 | Westen | Los Angeles | FORSCHUNG | 11 | 
| fünfzehn | NULL | San Francisco | MARKETING | 12 | 
| 4 | NULL | Chicago | INNOVATION | 11 | 
| 2 | NULL | Detroit | HUMANRESSOURCEN | 9 | 
CASE in ORDER BY-Klausel zum Sortieren von Datensätzen nach dem niedrigsten Wert von 2 Spalten
 Stellen Sie sich vor, Sie müssen Datensätze nach dem niedrigsten Wert einer der beiden Spalten sortieren. Einige Datenbanken könnten für diese Funktion eine nicht aggregierte MIN() oder LEAST() Funktion verwenden ( ... ORDER BY MIN(Date1, Date2) ), aber in Standard-SQL müssen Sie einen CASE Ausdruck verwenden. 
 Der CASE Ausdruck in der Abfrage sieht unten an dem Date1 und Date2 Spalten, überprüft , welcher Spalte den niedrigeren Wert, und sortiert die Datensätze in Abhängigkeit von diesem Wert. 
Beispieldaten
| Ich würde | Date1 | Date2 | 
|---|---|---|
| 1 | 2017-01-01 | 2017-01-31 | 
| 2 | 2017-01-31 | 2017-01-03 | 
| 3 | 2017-01-31 | 2017-01-02 | 
| 4 | 2017-01-06 | 2017-01-31 | 
| 5 | 2017-01-31 | 2017-01-05 | 
| 6 | 2017-01-04 | 2017-01-31 | 
Abfrage
SELECT Id, Date1, Date2
FROM YourTable
ORDER BY CASE 
           WHEN COALESCE(Date1, '1753-01-01') < COALESCE(Date2, '1753-01-01') THEN Date1 
           ELSE Date2 
         END
Ergebnisse
| Ich würde | Date1 | Date2 | 
|---|---|---|
| 1 | 2017-01-01 | 2017-01-31 | 
| 3 | 2017-01-31 | 2017-01-02 | 
| 2 | 2017-01-31 | 2017-01-03 | 
| 6 | 2017-01-04 | 2017-01-31 | 
| 5 | 2017-01-31 | 2017-01-05 | 
| 4 | 2017-01-06 | 2017-01-31 | 
Erläuterung
 Wie Sie sehen, steht Zeile mit Id = 1 erster Stelle, da Date1 den niedrigsten Datensatz aus der gesamten Tabelle 2017-01-01 . Zeile mit Id = 3 ist die zweite, da Date2 2017-01-02 entspricht und der zweitniedrigste Wert aus Tabelle ist und so weiter. 
 Daher haben wir Datensätze von 2017-01-01 bis 2017-01-06 aufsteigend sortiert und es ist nicht zu Date2 in welcher Spalte Date1 oder Date2 diese Werte sind.