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!
Mit dem Klick auf den Button stimmen Sie zu, daß Cookies in Ihrem Browser gespeichert werden. Informationen zu den gespeicherten Cookies finden Sie unter Datenschutz#Cookies.Bei Fragen zur Technik wenden Sie sich bitte an Server-Daten - Web-Datenbank-Lösungen