CASE-Anweisung und verschachtelter Fall in SQL Server: T-SQL-Beispiel
โก Intelligente Zusammenfassung
CASE ist ein bedingter Ausdruck in SQL Server, der einen Wert basierend auf der ersten Bedingung zurรผckgibt, die als wahr ausgewertet wird. Er bietet einfache und durchsuchbare Formen sowie die Mรถglichkeit zur Verschachtelung innerhalb von IFโฆELSE, UPDATE und ORDER BY.

รberblick รผber den Fall im wirklichen Leben!
Auch im realen Leben handeln wir je nach den Gegebenheiten unterschiedlich. Um dies weiter zu verdeutlichen, betrachten wir das folgende Beispiel:
- Wenn Flugtickets weniger als 100 $ kosten, werde ich Los Angeles besuchen.
- Wenn die Flugtickets zwischen 100 und 200 Dollar kosten, werde ich New York besuchen.
- Wenn die Flugtickets zwischen 200 und 400 Dollar kosten, werde ich nach Europa reisen.
- Ansonsten werde ich lieber einen nahegelegenen Touristenort besuchen.
Betrachten wir nun, wie wir den Zustand und die Handlung aus dem obigen Beispiel getrennt kategorisieren kรถnnen:
| Bedingungen โ Flugtickets | Aktionen werden nur ausgefรผhrt, wenn die Bedingung WAHR ist. |
| Less als $ 100 | Besuchen Sie Los Angeles |
| Zwischen $ 100 bis $ 200 | Besuchen Sie New York |
| Zwischen $ 200 bis $ 400 | Besuchen Sie Europa |
| Keine der oben genannten Bedingungen erfรผllt | In der Nรคhe gelegener Touristenort |
Im obigen Beispiel sehen wir, dass das Ergebnis der verschiedenen Bedingungen eine separate Handlung bestimmt. Beispielsweise wird der Besucher New York nur dann besuchen, wenn das Flugticket zwischen 100 und 200 Dollar kostet. Ebenso verhรคlt es sich mit dem MS SQL Die CASE-Anweisung bietet auรerdem die Mรถglichkeit, je nach Ergebnis verschiedener Bedingungen unterschiedliche T-SQL-Anweisungen auszufรผhren.
Was ist die CASE-Anweisung in SQL Server?
CASE-Anweisung in SQL Server ist die Erweiterung der ANSONSTEN Im Gegensatz zu IFโฆELSE, wo maximal eine Bedingung zulรคssig ist, ermรถglicht CASE dem Benutzer, mehrere Bedingungen anzuwenden, um unterschiedliche Aktionen in MS SQL auszufรผhren. Es gibt einen entsprechenden Wert zurรผck, der der vom Benutzer definierten Bedingung zugeordnet ist.
Lasst uns lernen, wie man CASE verwendet. SQL und dessen Konzept in den folgenden Abschnitten. In MS SQL gibt es zwei Arten von CASE-Anweisungen:
- Einfacher Fall
- Gesucht CASE
Einfacher Fall
Die Syntax fรผr den einfachen Fall
CASE <Case_Expression> WHEN Value_1 THEN Statement_1 WHEN Value_2 THEN Statement_2 . . WHEN Value_N THEN Statement_N [ELSE Statement_Else] END AS [ALIAS_NAME]
Hier:
- Der Parameter Case_Expression bezeichnet den Ausdruck, der schlieรlich mit Value_1, Value_2 usw. verglichen wird.
- Die Parameter Statement_1, Statement_2โฆ bezeichnen die Anweisungen, die ausgefรผhrt werden, wenn Case_Expression = Value_1, Case_Expression = Value_2 usw.
- Kurz gesagt, die Bedingung ist, ob Case_Expression = Value_N gilt, und die Aktion ist die Ausfรผhrung von Statement_N, wenn das obige Ergebnis WAHR ist.
- ALIAS_NAME ist optional und ist der Aliasname fรผr das Ergebnis der SQL Server CASE-Anweisung. Er wird hauptsรคchlich verwendet, wenn CASE in der SQL Server SELECT-Klausel verwendet wird.
Regeln fรผr den einfachen Fall
- Simple Case erlaubt nur einen Gleichheitsvergleich von Case_Expression mit Value_1 bis Value_N.
- Der Case_Expression wird der Reihe nach mit einem Wert verglichen, beginnend mit dem ersten Wert, also Wert_1. Im Folgenden wird der Ausfรผhrungsansatz erlรคutert:
- Wenn Case_Expression รคquivalent zu Value_1 ist, werden weitere WHENโฆTHEN-Anweisungen รผbersprungen und die CASE-Ausfรผhrung wird sofort ENDE.
- Wenn der Ausdruck nicht mit Wert_1 รผbereinstimmt, wird er mit Wert_2 auf รquivalenz verglichen. Dieser Vergleich wird so lange fortgesetzt, bis ein passender Wert aus der Menge von Wert_1, Wert_2 usw. gefunden wird.
- Wenn keine รbereinstimmung gefunden wird, geht die Steuerung zur ELSE-Anweisung รผber und Statement_Else wird ausgefรผhrt.
- ELSE ist optional.
- Wenn ELSE nicht vorhanden ist und Case_Expression mit keinem der Werte รผbereinstimmt, wird NULL angezeigt.
Das folgende Diagramm veranschaulicht den Ausfรผhrungsablauf eines einfachen Falls:
Beispiele
Angenommen, wir haben eine Tabelle mit dem Namen 'Guru99' mit zwei Spalten, Tutorial_ID und Tutorial_name, und vier Zeilen, wie unten dargestellt. Wir werden dieses 'GuruTabelle 99 in den folgenden Beispielen.
Abfrage 1: SIMPLE CASE mit der Option NO ELSE
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Ergebnis: Das folgende Diagramm veranschaulicht den Ablauf eines EINFACHEN FALLS OHNE ANDERE FรLLE.
Anfrage 2: SIMPLE CASE mit der ELSE-Option
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Ergebnis: Das folgende Diagramm erlรคutert den Ausfรผhrungsablauf eines einfachen CASE mit ELSE.
Gesucht CASE
Die Syntax fรผr die Suche im Groร-/Kleinschreibung
CASE WHEN <Boolean_Expression_1> THEN Statement_1 WHEN <Boolean_Expression_2> THEN Statement_2 . . WHEN <Boolean_Expression_N> THEN Statement_N [ELSE Statement_Else] END AS [ALIAS_NAME]
Hier:
- Der Parameter Boolean_Expression_1โฆ bezeichnet den Ausdruck, der auf WAHR oder FALSCH ausgewertet wird.
- Die Parameter Statement_1, Statement_2โฆ bezeichnen die Anweisungen, die ausgefรผhrt werden, wenn das entsprechende Ergebnis von Boolean_Expression_1, Boolean_Expression_2 WAHR ist.
- Kurz gesagt, die Bedingung ist Boolean_Expression_1โฆ und die Aktion ist die Ausfรผhrung von Statement_N, wenn der obige Boolean_Expression_1 WAHR ist.
- ALIAS_NAME ist optional und ist der Aliasname fรผr das Ergebnis der CASE-Anweisung. Er wird hauptsรคchlich verwendet, wenn CASE in der SELECT-Klausel verwendet wird.
Regeln fรผr den gesuchten Fall
- Im Gegensatz zum einfachen Fall ist der Suchfall nicht auf einen einfachen Gleichheitsvergleich beschrรคnkt, sondern erlaubt auch einen booleschen Ausdruck.
- Die Booleschen Ausdrรผcke werden der Reihe nach ausgewertet, beginnend mit dem ersten Booleschen Ausdruck, d. h. Boolean_Expression_1. Im Folgenden wird der Ausfรผhrungsansatz beschrieben:
- Wenn Boolean_Expression_1 TRUE ist, werden weitere WHENโฆTHEN-Anweisungen รผbersprungen und die CASE-Ausfรผhrung wird sofort beendet.
- Wenn Boolean_Expression_1 den Wert FALSE hat, wird Boolean_Expression_2 auf den Wert TRUE geprรผft. Dieser Vorgang wird so lange fortgesetzt, bis einer der beiden Ausdrรผcke TRUE ergibt.
- Wenn keine รbereinstimmung gefunden wird, geht die Steuerung zur ELSE-Anweisung รผber und Statement_Else wird ausgefรผhrt.
- Wie im einfachen Fall ist ELSE auch im gesuchten Fall optional.
- Wenn ELSE nicht vorhanden ist und keiner der booleschen Ausdrรผcke TRUE zurรผckgibt, wird NULL angezeigt.
Das folgende Diagramm veranschaulicht den Ausfรผhrungsablauf des gesuchten Falls:
Beispiele
Abfrage 1: Gesuchter Fall mit der Option NO ELSE
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Ergebnis: Das folgende Diagramm erlรคutert den Ausfรผhrungsablauf des GESUCHTEN FALLS OHNE SONSTIGE FALL.
Anfrage 2: GESUCHTER FALL mit der ELSE-Option
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Ergebnis: Das folgende Diagramm erlรคutert den Ausfรผhrungsablauf des SEARCHED CASE mit ELSE.
Unterschied zwischen den Ausfรผhrungsansรคtzen: EINFACHER und SUCHE-FALL
Werfen wir einen Blick auf das folgende Beispiel des EINFACHEN FALLS:
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Hierbei ist โTutorial_nameโ Teil des CASE-Ausdrucks in SQL. Anschlieรend wird der Wert von โTutorial_nameโ mit jedem WHEN-Wert, d. h. โSQLโ, verglichen, bis โTutorial_nameโ mit einem WHEN-Wert รผbereinstimmt.
Im Gegenteil, das Beispiel SEARCH CASE enthรคlt keinen CASE-Ausdruck:
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Hier hat jede WHEN-Anweisung ihren eigenen bedingten booleschen Ausdruck. Jeder boolesche Ausdruck, z. B. Tutorial_name = 'SQL'โฆ, wird auf WAHR/FALSCH ausgewertet, bis der erste boolesche Ausdruck WAHR ergibt.
Unterschied zwischen einfachem und gesuchtem Fall
| Einfacher Fall | Durchsuchter Fall |
| Dem Schlรผsselwort CASE folgt unmittelbar der CASE-Ausdruck und es steht vor der WHEN-Anweisung.
Z.B: |
Dem Schlรผsselwort CASE folgt die WHEN-Anweisung, und zwischen CASE und WHEN steht kein Ausdruck.
Z.B: |
| Im einfachen Fall existiert fรผr jede WHEN-Anweisung ein Wert. Diese Werte (Wert_1, Wert_2โฆ) werden nacheinander mit einem einzigen CASE-Ausdruck verglichen. Das Ergebnis wird fรผr jede WHEN-Anweisung auf die Bedingung WAHR/FALSCH geprรผft.
Z.B: |
In einem Suchfall existiert fรผr jede WHEN-Anweisung ein Boolescher Ausdruck. Diese Booleschen Ausdrรผcke (Boolescher_Ausdruck_1, Boolescher_Ausdruck_2โฆ) werten die Bedingung WAHR/FALSCH fรผr jede WHEN-Anweisung aus.
Z.B: |
| Ein einfacher Fall unterstรผtzt nur einen Gleichheitsvergleich, d. h. ob CASE_Expression = VALUE_1, VALUE_2โฆ
Z.B: |
Mit Boolean_Expression_N unterstรผtzt ein Suchfall jede Operation, die einen booleschen Wert ergibt. Dazu gehรถren die Operatoren โgleichโ und โungleichโ.
Z.B: |
Verschachtelter CASE: CASE in IF ELSE
Wir kรถnnen CASE innerhalb einer IFโฆELSE-Anweisung verwenden. Wir deklarieren einen Variable Fรผr das Flugticket und die Verzweigung nach dessen Wert. Nachfolgend finden Sie den Beispiel-MS-SQL-Code:
DECLARE @Flight_Ticket int; SET @Flight_Ticket = 190; IF @Flight_Ticket > 400 PRINT 'Visit Nearby Tourist Location'; ELSE BEGIN SELECT CASE WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles' WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York' WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe' END AS Location END
Im obigen Beispiel ist die CASE-Anweisung in der IFโฆELSE-Anweisung verschachtelt. Zuerst wird die IF-Anweisung ausgefรผhrt. Ist die CASE-Bedingung in SQL Server โfalseโ, wird die ELSE-Anweisung ausgefรผhrt. Der ELSE-Teil enthรคlt eine verschachtelte CASE-Anweisung in SQL. Abhรคngig vom Wert des Flugtickets wird eines der folgenden Ergebnisse angezeigt:
- Das System gibt die Meldung โBesuchen Sie ein nahegelegenes Touristenzielโ aus, wenn die Flugtickets mehr als 400 Dollar kosten.
- Das System druckt โVisit Los Angelesโ, wenn die Flugtickets zwischen 0 und 100 Dollar kosten.
- Das System druckt โVisit New Yorkโ, wenn die Flugtickets zwischen 101 und 200 Dollar kosten.
- Das System druckt โVisit Europeโ, wenn die Flugtickets zwischen 201 und 400 US-Dollar kosten.
Das folgende Ergebnis zeigt die Position, die zurรผckgegeben wird, wenn der verschachtelte CASE-Zweig innerhalb des ELSE-Zweigs ausgefรผhrt wird:
Verschachtelter CASE: CASE innerhalb von CASE
In SQL kรถnnen wir CASE-Anweisungen innerhalb anderer CASE-Anweisungen verwenden. Nachfolgend finden Sie ein Beispiel fรผr MS-SQL-Code:
DECLARE @Flight_Ticket int; SET @Flight_Ticket = 250; SELECT CASE WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.' WHEN @Flight_Ticket < 400 THEN CASE WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles' WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York' WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe' END END AS Location
Im obigen Beispiel ist eine CASE-Anweisung in einer anderen CASE-Anweisung verschachtelt. Das System fรผhrt zuerst die รคuรere CASE-Anweisung aus; falls Flight_Ticket < 400 $ ist, wird die innere CASE-Anweisung ausgefรผhrt. Der zurรผckgegebene Standort folgt denselben Ticketkategorien wie im vorherigen Beispiel, sodass ein Ticket fรผr 250 $ in den Bereich von 201 $ bis 400 $ fรคllt und โVisit Europeโ zurรผckgibt.
Das untenstehende Ergebnis zeigt den vom inneren CASE fรผr ein Ticket im Wert von 250 $ zurรผckgegebenen Standort:
FALL mit UPDATE
Nehmen wir erneut an, wir hรคtten das 'GuruTabelle 99 mit zwei Spalten und vier Zeilen, wie unten dargestellt:
Wir kรถnnen CASE mit UPDATE verwenden. Unten finden Sie den Beispiel-MS-SQL-Code:
UPDATE Guru99 SET Tutorial_Name = ( CASE WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.' WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL' WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.' WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.' END )
Im obigen Beispiel wird CASE in der UPDATE-Anweisung verwendet. Abhรคngig vom Wert von Tutorial_Name wird die Spalte Tutorial_Name mit dem Wert der THEN-Anweisung aktualisiert:
- Wenn Tutorial_Name = 'SQL', dann aktualisiere Tutorial_Name auf 'Structured Query language'.
- Wenn Tutorial_Name = 'PL/SQL', dann aktualisiere Tutorial_Name auf 'Oracle PL/SQL'.
- Wenn Tutorial_Name = 'MSSQL', dann aktualisiere Tutorial_Name auf 'Microsoft SQL'.
- Wenn Tutorial_Name = 'Hadoop', dann aktualisiere Tutorial_Name auf 'Apache Hadoop'.
Die Ausfรผhrung der Anweisung aktualisiert die รผbereinstimmenden Zeilen, wie unten dargestellt:
Lassen Sie uns die Frage stellen:GuruTabelle 99 zur รberprรผfung der aktualisierten Werte:
CASE mit Order by
Wir kรถnnen CASE mit ORDER BY verwenden. Nachfolgend finden Sie ein Beispiel fรผr MS-SQL-Code:
Declare @Order Int; Set @Order = 1 Select * from Guru99 order by CASE WHEN @Order = 1 THEN Tutorial_ID WHEN @Order = 2 THEN Tutorial_Name END DESC
Hier wird CASE mit ORDER BY verwendet. @Order ist auf 1 gesetzt, und da der erste boolesche WHEN-Ausdruck zu TRUE ausgewertet wird, wird Tutorial_ID fรผr die ORDER BY-Bedingung ausgewรคhlt. Das Ergebnis wird unten angezeigt:
Interessante Fakten!
- CASE kann sowohl in einer anderen CASE-Anweisung als auch in einer IFโฆELSE-Anweisung verschachtelt werden.
- Zusรคtzlich zu SELECT kann CASE auch mit anderen SQL-Klauseln wie UPDATE und ORDER BY verwendet werden.













