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.

  1. Einfacher Fall
  2. 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.

Funktionsweise einer einfachen Fallaussage
Funktionsweise einer einfachen Fallaussage

Beispiele

Annahme: Nehmen wir an, wir haben die Tabelle als 'Guru99' mit zwei Spalten und vier Zeilen wie unten dargestellt:

Einfacher Fall in SQL Server

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.

Einfacher Fall in SQL Server

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.

Einfacher Fall in SQL Server

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.

Bearbeitung der durchsuchten Fallerklรคrung

Bearbeitung der durchsuchten Fallerklรคrung

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.

Durchsuchtes CASE-Beispiel in SQL Server

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.

CASE in SQL Server durchsucht

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:
FALL
WHEN Wert_1 DANN Aussage_1โ€ฆ

Auf das Schlรผsselwort case folgt die WHEN-Anweisung, und zwischen CASE und WHEN gibt es keinen Ausdruck.

Z.B:
FALL WANN DANN Aussage_1โ€ฆ

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:
FALL
WHEN Wert_1 DANN Aussage_1โ€ฆ
WHEN Wert_2 DANN Aussage_2โ€ฆ

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:
CASE
WANN DANN Aussage_1โ€ฆ
WANN DANN Aussage_2โ€ฆ

Einfache Fallunterstรผtzung nur Gleichheitsprรผfung. Dh ob CASE_Expression = VALUE_1, VALUE_2โ€ฆ

Z.B:
FALL WHEN Value_1 THEN Statement_1โ€ฆIm obigen Beispiel prรผft das System lediglich, ob Case_Expression = Value_1 ist.

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:
FALL, WENN DANN Anweisung_1โ€ฆ Im obigen Beispiel kann Boolean_Expression_1 sowohl den Operator โ€žgleichโ€œ als auch โ€žungleichโ€œ enthalten, wie etwa A = B, A != 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 in SQL Server

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

Verschachteltes CASE-Beispiel in SQL Server

FALL mit UPDATE

Annahme: Angenommen, wir haben die Tabelle โ€žGuru99โ€œ mit zwei Spalten und vier Zeilen, wie unten dargestellt:

CASE mit UPDATE in SQL Server

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'.

CASE mit UPDATE in SQL Server

Lassen Sie uns die Guru99-Tabelle abfragen, um den aktualisierten Wert zu รผberprรผfen:

CASE mit UPDATE in SQL Server

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

CASE mit Order by in SQL Server

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.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: