Case

wertet eine Liste von Bedingungen aus und gibt einen von mehreren denkbaren Ausdrücken zurück.

Case gibt es in zwei Versionen:

  • Einfache Version: Vergleich eines Ausdrucks mit verschiedenen einfachen Ausdrücken
  • Komplexe Version: Liste von Bedingungen, die True oder False zurückgeben
Case kann überall dort verwendet werden, wo ein Ausdruck erlaubt ist. Dies kann innerhalb von Spaltenlisten im Select-Abschnitt, aber auch innerhalb von Where- und Order-By-Abschnitten sein. Damit ist bsp. eine vom Benutzer festgelegte und durch einen Parameterwert erzeugte Sortierung möglich.

Syntax

Einfache Version

CASE <Prüfausdruck>
    WHEN <erste Möglichkeit> THEN <erstes Resultat>
    WHEN <zweite Möglichkeit> THEN <zweites Resultat>
      [...]
    [
      ELSE <alternatives Resultat>
    ]
END

Komplexe Version

CASE
    WHEN <erster Boolean-Ausdruck> THEN <erstes Resultat>
      [...]
    [
      ELSE <alternatives Resultat>
    ]
END

Argumente

<Prüfausdruck>
der auszuwertende Ausdruck für die einfache Case-Version
<erste Möglichkeit>
der erste Ausdruck, der auf die Übereinstimmung mit dem Prüfausdruck getestet wird
<erstes Resultat>
das erste auszugebende Ergebnis
<alternatives Resultat>
das Ergebnis, welches ausgegeben wird, falls alle Prüfungen zuvor nicht positiv waren
<erster Boolean-Ausdruck>
ein Boolean-Ausdruck, der Vergleichsoperatoren (=, !=), Klauseln (Is Null, Between) und ähnliches enthalten kann oder eine Kombination mehrerer Boolean-Ausdrücke mit And/Or

Beispiele

Beispiel für eine ad-hoc-Übersetzung innerhalb der auszugebenden Spalten:

Select A.A_Name, CASE A.A_Name
    When 'Hose' Then 'pantaloon'
    When 'Oberhemd' Then 'shirt'
    When 'Mantel' Then 'coat'
End
As [english]
From Artikel As A

Beispiel für eine benutzerdefinierte Festlegung der Sortierung: Sei @Column_Name eine nvarchar(50)-Spalte, welche mit dem Wert einer Spalte der Tabelle 'Artikel' belegt sei. Dann ist der folgende Code ungültig:

Select A.*
From Artikel As A
Order By @Column_Name

In Sortierausdrücken sind keine Variablen anstelle von Spaltennamen erlaubt. Der folgende Code ist jedoch gültig:

Select *
From Artikel As A
Order By
  Case @Column_Name
    When 'ArtikelId' Then Cast(A.ArtikelId as sql_variant)
    When 'A_Name' Then A.A_Name
    When 'A_Preis' Then A.A_Preis
  End

Der einzigste Nachteil besteht darin, daß sich der Datentyp der Sortierspalte nach der ersten Spalte richtet, welcher von der Case-Anweisung zurückgegeben wird. Zur Vermeidung von Konvertierungsproblemen muß deshalb die erste Rückgabe in den sql_variant-Datentyp transferiert werden.

Hinweise

Die einfache Version überprüft nur auf Gleichheit zwischen dem Prüfausdruck und den verschiedenen Alternativen mit dem '=' - Operator. Damit kann sie durch die komplexe Version dargestellt werden, so daß sie theoretisch entfernt werden könnte:

CASE
    WHEN <Prüfausdruck> = <erste Möglichkeit>
      THEN <erstes Resultat>
      [...]
    [
      ELSE <alternatives Resultat>
    ]
END

Link zur hiesigen Seite als QR-Code

Kontaktformular:

Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!

Die Erläuterungen zum Datenschutz habe ich gelesen und stimme diesen zu.

© 2003-2023 Jürgen Auer, Berlin.