CASE-Anweisung und verschachtelter Fall in SQL Server: T-SQL-Beispiel
รberblick รผber den Fall im wirklichen Leben!
Auch im wirklichen Leben fรผhren wir je nach dem Ergebnis verschiedener Bedingungen unterschiedliche Aktionen aus.
Um das nรคher zu erlรคutern, betrachten Sie das folgende Beispiel:
- Wenn Flugtickets weniger als 100 $ kosten, werde ich Los Angeles besuchen.
- Wenn Flugtickets zwischen 100 und 200 US-Dollar kosten, werde ich New York besuchen
- Wenn Flugtickets zwischen 200 und 400 US-Dollar kosten, werde ich Europa besuchen
- Ansonsten wรผrde ich es vorziehen, einen nahegelegenen Touristenort zu besuchen.
Betrachten wir die Kategorisierung von Bedingung und Aktion getrennt vom obigen Beispiel unten:
| Bedingungen โ Flugtickets | Durchgefรผhrte Aktionen, nur wenn Bedingung ist TRUE |
| 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 kรถnnen wir sehen, dass das Ergebnis der verschiedenen Bedingungen die einzelnen Aktionen bestimmt. Beispielsweise wird ein Besucher einen Besuch in New York nur unter der Bedingung durchfรผhren, dass das Flugticket zwischen 100 und 200 US-Dollar kostet.
In รคhnlicher Weise bietet die MS SQL-CASE-Anweisung auch die Mรถglichkeit, basierend auf dem 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 IFโฆELSE-Anweisung. Im Gegensatz zu IFโฆELSE, wo nur maximal eine Bedingung zulรคssig ist, ermรถglicht CASE dem Benutzer, mehrere Bedingungen anzuwenden, um verschiedene Aktionssรคtze in MS SQL auszufรผhren. Es gibt einen entsprechenden Wert zurรผck, der der vom Benutzer definierten Bedingung zugeordnet ist.
Lassen Sie uns in den folgenden Abschnitten die Verwendung von Case in SQL und das Konzept lernen.
In MS SQLgibt es zwei Arten von CASE.
- Einfacher Fall
- Gesucht CASE
Einfacher Fall
Die Syntax fรผr Simple Case
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]
Dabei steht:
- Der Parameter Case_Expression bezeichnet den Ausdruck, mit dem wir schlieรlich verglichen werden Wert_1, Wert_2, ...
- Die Parameter Aussage_1, Aussage_2โฆ bezeichnen die Anweisungen, die ausgefรผhrt werden, wenn Case_Expression = Value_1, Case_Expression = Wert_2, โฆ und so weiter.
- Kurz gesagt, die Zustand ist, ob Case_Expression = Value_N und ACTION ist die Ausfรผhrung von Statement_N, wenn der Das obige Ergebnis ist WAHR.
- PSEUDONYM ist optional und der Aliasname, der dem Ergebnis der SQL Server-CASE-Anweisung gegeben wird. Wird hauptsรคchlich verwendet, wenn wir Case in der SQL Server-Select-Klausel verwenden.
Regeln fรผr den einfachen Fall
- Simple Case ermรถglicht nur die Gleichheitsprรผfung von Case_Expression mit Value_1 bis Value_N.
- Der Case_Expression wird mit Value verglichen, beginnend mit dem ersten Wert, also Value_1. Unten ist der Ausfรผhrungsansatz:
- Wenn Case_Expression รคquivalent zu Value_1 ist, werden weitere WHENโฆTHEN-Anweisungen รผbersprungen und die CASE-Ausfรผhrung wird sofort ENDE.
- Wenn Case_Expression nicht mit Value_1 รผbereinstimmt, wird Case_Expression mit Value_2 auf Gleichwertigkeit verglichen. Dieser Vorgang des Vergleichs von Case_Expression mit Value wird fortgesetzt, bis Case_Expression einen passenden รคquivalenten Wert aus der Menge von Value_1, Value_2, ... findet.
- Wenn nichts รผbereinstimmt, geht die Steuerung an die ELSE-Anweisung und Statement_Else wird ausgefรผhrt.
- ELSE ist optional.
- Wenn ELSE nicht vorhanden ist und Case_Expression mit keinem der Werte รผbereinstimmt, dann Es wird Null angezeigt.
Das folgende Diagramm veranschaulicht den Ausfรผhrungsablauf von Simple Case.

Beispiele
Annahme: Nehmen wir an, wir haben die Tabelle als 'Guru99' mit zwei Spalten und vier Zeilen wie unten dargestellt:
Wir werden verwenden 'Guru99' Tabelle in weiteren 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 erlรคutert den Ausfรผhrungsablauf eines SIMPLE CASE ohne ELSE.
Abfrage 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 SIMPLE CASE mit ELSE.
Gesucht CASE
Die Syntax fรผr den durchsuchten Fall
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]
Dabei steht:
- Der Parameter Boolean_Expression_1, โฆbezeichnet den Ausdruck, der auf TRUE oder FALSE 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 TRUE ist.
- Kurz gesagt, Bedingung ist Boolescher_Ausdruck_1,โฆ und AKTION ist die Ausfรผhrung von Anweisung_N, wenn oben boolescher_Ausdruck_1 WAHR ist.
- ALIAS_NAME ist optional und der Aliasname, der dem Ergebnis der CASE-Anweisung gegeben wird. Wird hauptsรคchlich verwendet, wenn wir CASE in der Select-Klausel verwenden.
Regeln fรผr den gesuchten Fall
- Im Gegensatz zum einfachen Fall ist Searched Case nicht nur auf die Gleichheitsprรผfung beschrรคnkt, sondern ermรถglicht auch boolesche Ausdrรผcke.
- Der boolesche Ausdruck wird der Reihe nach ausgewertet, beginnend mit dem ersten booleschen Ausdruck, also Boolescher_Ausdruck_1. Unten ist der Ausfรผhrungsansatz:
- Wenn Boolean_expression_1 TRUE ist, werden weitere WHENโฆTHEN-Anweisungen รผbersprungen und die CASE-Ausfรผhrung wird sofort ENDE.
- Wenn Boolean_expression_1 FALSE ist, wird Boolean_expression_2 fรผr die WAHR-Bedingung ausgewertet. Dieser Prozess der Bewertung des booleschen_Ausdrucks wird fortgesetzt, bis einer der booleschen_Ausdrรผcke TRUE zurรผckgibt.
- Wenn nichts รผbereinstimmt, geht die Steuerung an die ELSE-Anweisung und Statement_Else wird ausgefรผhrt.
- Wie im einfachen Fall ist ELSE auch im Suchfall optional.
- Wenn ELSE nicht vorhanden ist und keiner der Boolean_expressions TRUE zurรผckgibt, wird Null angezeigt.
Untenstehendes Diagramm Veranschaulichen Sie den Ausfรผhrungsablauf des Durchsuchter Fall.
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: Untenstehendes Diagramm erklรคrt den Ausfรผhrungsablauf Gesuchter Fall und NICHTS ANDERES.
Abfrage 2: GESUCHERTER FALL an. Nach der Installation kรถnnen Sie HEIC-Dateien mit der 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.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Ergebnis: Untenstehendes Diagramm erklรคrt den Ausfรผhrungsablauf of der gesuchte Fall und SONST.
Unterschied zwischen Ausfรผhrungsansatz: SIMPLE und SEARCH CASE.
Schauen wir uns das an EINFACHER FALL Beispiel unten:
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
Dabei steht: 'Tutorial_name' ist ein Teil des CASE-Ausdrucks in SQL. Dann 'Tutorial_name' Der Wert wird jeweils miteinander verglichen WANN-Werte, dh 'SQL'... bis 'Tutorial_name' mit den WHEN-Werten รผbereinstimmt.
Im Gegenteil, FALL SUCHEN Beispiel hat keine 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 jeder WHEN-Anweisung hat Bedingter boolescher Ausdruck. . Der Boolescher Ausdruck Das heiรt, Tutorial_name = 'SQL',โฆ wird ausgewertet WAHR FALSCH bis erster Boolescher Wert Ausdruck, der zu ausgewertet wird TRUE.
Unterschied zwischen einfachem und gesuchtem Fall
| Einfacher Fall | Durchsuchter Fall |
|---|---|
| Auf das Schlรผsselwort CASE folgt unmittelbar CASE_Expression und vor der WHEN-Anweisung.
Z.B: |
Auf das Schlรผsselwort case folgt die WHEN-Anweisung, und zwischen CASE und WHEN gibt es keinen Ausdruck.
Z.B: |
| Im einfachen Fall existiert VALUE fรผr jede WHEN-Anweisung. Diese Werte: Value_1, Value_2โฆ werden nacheinander mit einzelnen CASE_Expression verglichen. Das Ergebnis wird fรผr jede WHEN-Anweisung auf die TRUE/FALSE-Bedingung hin ausgewertet.
Z.B: |
Im durchsuchten Fall ist Boolean_Expression fรผr jede WHEN-Anweisung vorhanden. Diese Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,โฆ wertet die TRUE/FALSE-Bedingung fรผr jede WHEN-Anweisung aus.
Z.B: |
| Einfache Fallunterstรผtzung nur Gleichheitsprรผfung. Dh ob CASE_Expression = VALUE_1, VALUE_2โฆ
Z.B: |
Mit Boolean_Expression_N unterstรผtzt Search Case jede Operation, die einen Booleschen Wert ergibt. Dazu gehรถren die Operatoren โgleichโ und โungleichโ.
Z.B: |
Verschachtelter CASE: CASE in IF ELSE
Wir verwenden CASE im Inneren, WENN SONST. Unten 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 CASE innerhalb der IFโฆELSE-Anweisung verschachtelt:
Zuerst wird die IF-Anweisung ausgefรผhrt und die Case-Bedingung eingegeben SQL Server Falsch ist, wird die ELSE-Anweisung ausgefรผhrt.
Andernfalls enthรคlt es eine verschachtelte CASE-Anweisung in SQL. Abhรคngig vom Wert des Flugtickets wird eines der folgenden Ergebnisse angezeigt:
- Das System druckt โBesuchen Sie einen nahegelegenen Touristenortโ aus, wenn die Flugtickets mehr als 400 $ kosten
- Das System gibt โVisit Los Angelesโ aus, wenn die Flugtickets ZWISCHEN 0 UND 100 US-Dollar kosten
- Das System druckt โVisit New Yorkโ, wenn Flugtickets ZWISCHEN 101 UND 200 US-Dollar kosten
- Das System gibt โVisit Europeโ aus, wenn die Flugtickets ZWISCHEN 201 UND 400 US-Dollar kosten
Verschachtelter CASE: CASE innerhalb von CASE
Wir kรถnnen CASE innerhalb von CASE in SQL verwenden. Unten finden Sie den Beispiel-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 CASE in einer anderen CASE-Anweisung verschachtelt:
Das System beginnt mit der Ausfรผhrung des รคuรeren CASE. Wenn Flight_Ticket < $400 ist, wird inneres CASE ausgefรผhrt.
Abhรคngig vom Wert des Flugtickets wird eines der folgenden Ergebnisse angezeigt:
- Das System druckt โBesuchen Sie einen nahegelegenen Touristenortโ aus, wenn die Flugtickets mehr als 400 $ kosten
- Das System gibt โVisit Los Angelesโ aus, wenn die Flugtickets ZWISCHEN 0 UND 100 US-Dollar kosten
- Das System druckt โVisit New Yorkโ, wenn Flugtickets ZWISCHEN 101 UND 200 US-Dollar kosten
- Das System gibt โVisit Europeโ aus, wenn die Flugtickets ZWISCHEN 201 UND 400 US-Dollar kosten
FALL mit UPDATE
Annahme: Angenommen, wir haben die Tabelle โGuru99โ mit zwei Spalten und vier Zeilen, wie unten dargestellt:
In weiteren Beispielen werden wir die Tabelle โGuru99โ verwenden
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 โTutorial_Nameโ wird die Spalte โTutorial_Nameโ mit dem THEN-Anweisungswert aktualisiert.
- Wenn Tutorial_Name = 'SQL', DANN aktualisieren Sie Tutorial_Name auf 'Structured Query language'.
- Wenn Tutorial_Name = 'PL/SQL', DANN aktualisieren Sie Tutorial_Name auf 'Oracle PL/SQL'
- Wenn Tutorial_Name = โMSSQLโ, DANN aktualisieren Sie Tutorial_Name auf โMicrosoft SQLโ
- Wenn Tutorial_Name = 'Hadoop', DANN aktualisieren Sie Tutorial_Name auf 'Apache Hadoop'.
Lassen Sie uns die Guru99-Tabelle abfragen, um den aktualisierten Wert zu รผberprรผfen:
CASE mit Order by
Wir kรถnnen CASE mit Order By verwenden. Unten finden Sie den Beispiel-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 als erster boolescher Ausdruck, WENN er TRUE ergibt, wird Tutorial_ID fรผr Order by Condition ausgewรคhlt
Interessante Fakten!
- CASE kann sowohl in einem anderen CASE als auch in einer anderen IFโฆELSE-Anweisung verschachtelt werden.
- Zusรคtzlich zu SELECT kann CASE mit einem anderen verwendet werden SQL Klausel wie UPDATE, ORDER BY.
Zusammenfassung
- In MS SQL gibt es zwei Arten von CASE: Einfaches CASE und durchsuchtes CASE
- ELSE ist in der CASE-Anweisung optional.











