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.














