CASE Statement & Nested Case i SQL Server: T-SQL Exempel

Översikt över Case i verkliga livet!

Återigen, i det verkliga livet utför vi olika handlingar beroende på resultatet av olika tillstånd.

För att utveckla mer, överväg nedanstående exempel:

  • Om flygbiljetterna är mindre än $100, då kommer jag att besöka Los Angeles.
  • Om flygbiljetterna är mellan $100 till $200, då kommer jag att besöka New York
  • Om flygbiljetterna är mellan $200 till $400, då kommer jag att besöka Europa
  • Annars föredrar jag att besöka någon närliggande turistplats.

Låt oss överväga att kategorisera tillstånd och åtgärd separat från exemplet ovan nedan:

Betingelser - Flygbiljetter Åtgärder utförda, endast om skick är SANN
Less än $ 100 Besök Los Angeles
Mellan $ 100 till $ 200 Besök New York
Mellan $ 200 till $ 400 Besök Europa
Inget av ovanstående villkor uppfylldes Närliggande turistplats

I exemplet ovan kan vi se att resultatet av de olika villkoren styr separata åtgärder. Besökaren kommer till exempel att utföra handlingen att besöka New York endast i det skicket om flygbiljetten är mellan $100 och $200.

På samma sätt ger MS SQL CASE-satsen också möjligheten att vidta åtgärder för att exekvera olika T-SQL-satser baserat på resultatet av olika tillstånd.

Vad är CASE Statement i SQL Server?

CASE-uttalande i SQL Server är förlängningen av IF...ELSE-satsen. Till skillnad från IF…ELSE, där endast maximalt ett villkor är tillåtet, tillåter CASE användaren att tillämpa flera villkor för att utföra olika uppsättningar av åtgärder i MS SQL. Den returnerar ett motsvarande värde som är associerat med villkoret som definierats av användaren.

Låt oss lära oss hur man använder Case i SQL och dess koncept i följande avsnitt.

In MSSQL, det finns två typer av CASE.

  1. Enkelt FALL
  2. Sökte i CASE

Enkelt FALL

Syntaxen 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]

Här,

  • Parametern Case_Expression betecknar uttrycket som vi så småningom kommer att jämföras med Värde_1, Värde_2, ...
  • Parametrarna Statement_1, Statement_2… anger de uttalanden som kommer att utföras om Case_Expression = Value_1, Case_Expression = Value_2, … och så vidare.
  • I ett nötskal tillstånd är om Case_Expression = Value_N och ACTION är exekveringen av Statement_N om ovanstående resultat är SANT.
  • ALIAS NAMN är valfritt och är det alias som ges till resultatet av SQL Server CASE-satsen. Används mest när vi använder Case i SQL-servervalsklausulen.

Regler för Simple Case

  • Enkelt fall tillåter endast likhetskontroll av Case_Expression med Value_1 till Value_N.
  • Case_Expression jämförs med Value, i ordning från det första värdet, dvs. Value_1. Nedan är utförandemetoden:
  • Om Case_Expression är ekvivalent med Value_1, hoppas ytterligare WHEN…THEN-satser över, och CASE-körningen AVSLUTAS omedelbart.
  • Om Case_Expression inte matchar med Value_1 jämförs Case_Expression med Value_2 för ekvivalens. Denna process att jämföra Case_Expression med Value kommer att fortsätta tills Case_Expression hittar motsvarande motsvarande värde från uppsättningen Value_1, Value_2,...
  • Om inget matchar, går kontrollen till ELSE-satsen, och Statement_Else kommer att exekveras.
  • ANNAT är valfritt.
  • Om ELSE inte finns och Case_Expression matchar med inget av värdena, då Null kommer att visas.

Diagrammet nedan illustrerar exekveringsflödet för Simple Case.

Working of Simple Case Statement
Working of Simple Case Statement

Exempel

Antagande: Antag att vi har tabellen som "Guru99" med två kolumner och fyra rader som visas nedan:

Enkelt fall i SQL Server

Vi kommer använda "Guru99" tabell i ytterligare exempel

Fråga 1: ENKEL FALL med alternativet INGEN ANNAT

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

Resultat: Diagrammet nedan förklarar exekveringsflödet för ett ENKELT FALL UTAN ANNAT.

Enkelt fall i SQL Server

Fråga 2: ENKEL FALL med alternativet ANNAT.

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

Resultat: Diagrammet nedan förklarar exekveringsflödet för ett ENKELT CASE med ELSE.

Enkelt fall i SQL Server

Sökte i CASE

Syntaxen för sökta 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]

Här,

  • Parametern Boolean_Expression_1, … anger uttrycket som kommer att utvärderas för TRUE eller FALSE.
  • Parametrarna Statement_1, Statement_2… anger de påståenden som kommer att köras om dess motsvarande Boolean_Expression_1, Boolean_Expression_2 resultat är TRUE.
  • I ett nötskal är Condition Boolean_Expression_1,... och ACTION är exekveringen av Statement_N om ovan boolean_Expression_1 är TRUE.
  • ALIAS_NAME är valfritt och är aliasnamnet som ges till CASE-satsresultatet. Används oftast när vi använder CASE i select-satsen.

Regler för genomsökt ärende

  • Till skillnad från det enkla fallet är Searched Case inte begränsad till enbart likhetskontroll utan tillåter booleska uttryck.
  • Det booleska uttrycket utvärderas i ordning från det första booleska uttrycket, dvs booleskt_uttryck_1. Nedan är utförandemetoden:
    • Om Boolean_expression_1 är TRUE, hoppas ytterligare WHEN...THEN-satser över, och CASE-exekveringen AVSLUTAS omedelbart.
    • Om Boolean_expression_1 är FALSE, utvärderas Boolean_expression_2 för TRUE-tillstånd. Denna process att bedöma Boolean_expression kommer att fortsätta tills ett av Boolean_expression returnerar TRUE.
    • Om inget matchar, går kontrollen till ELSE-satsen, och Statement_Else kommer att exekveras.
  • Like Simple Case ANNAT är valfritt i sökfall också.
  • Om ELSE inte finns och inget av Boolean_expression returnerar TRUE, kommer Null att visas.

Diagram nedan illustrera exekveringsflödet av Sökte i Case.

Arbete med sökt ärendeutlåtande

Arbete med sökt ärendeutlåtande

Exempel

Fråga 1: SÖKTADE FALL med alternativet INGEN ANNAT

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

Resultat: Nedanstående diagram förklarar exekveringsflödet av SÖKT FALL med INGEN ANNAT.

Sökte efter CASE-exempel i SQL Server

Fråga 2: SÖKT FALL med ANNARS alternativ.

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

Resultat: Nedanstående diagram förklarar exekveringsflödet of DET SÖKADE FALLET med ANNAN.

Sökte efter CASE i SQL Server

Skillnad mellan exekveringsmetod: SIMPLE och SEARCH CASE.

Låt oss ta en titt på ENKEL FALL exempel nedan:

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

Här, "Tutorial_name" är en del av CASE-uttryck i SQL. Sedan "Tutorial_name" värdet jämförs med varje NÄR värden, dvs 'SQL'... tills 'Tutorial_name' matchar WHEN-värdena.

Tvärtom, SÖK FALL exemplet har nr CASE-uttryck:

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

Här, var och en NÄR uttalande har sin Villkorligt booleskt uttryck. Varje booleskt uttryck dvs. Tutorial_name = 'SQL',... utvärderas för SANT FALSKT tills första booleska uttryck som utvärderar till SANN.

Skillnaden mellan enkelt och sökt fall

Enkelt fall Sökte i Case
CASE-nyckelordet följs omedelbart av CASE_Expression och före WHEN-satsen.

T.ex:
FALL
NÄR Värde_1 DÅ Uttalande_1...

Case-nyckelordet följs av WHEN-satsen, och det finns inget uttryck mellan CASE och WHEN.

T.ex:
FALL NÄR DÅ Uttalande_1...

I enkla fall finns VALUE för varje WHEN-sats. Dessa värden: Value_1, Value_2… Jämförs med enstaka CASE_Expression sekventiellt. Resultatet utvärderas för TRUE/FALSE-villkoret för varje WHEN-påstående.

T.ex:
FALL
NÄR Värde_1 DÅ Uttalande_1...
NÄR Värde_2 DÅ Uttalande_2...

I sökt fall finns Boolean_Expression för varje WHEN-sats. Detta Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,... utvärderar TRUE/FALSE-villkoret för varje WHEN-sats.

T.ex:
CASE
NÄR DÅ Uttalande_1...
NÄR DÅ Uttalande_2...

Simple Case stöder endast jämställdhetskontroll. Dvs om CASE_Expression = VALUE_1, VALUE_2...

T.ex:
FALL WHEN Value_1 THEN Statement_1...I exemplet ovan är den enda operation som utförs av systemet att kontrollera om Case_Expression = Value_1

Med Boolean_Expression_N stöder Search Case alla operationer som resulterar i ett booleskt värde. Det inkluderar lika och inte lika med operator.

T.ex:
FALL NÄR THEN Statement_1... I ovanstående exempel kan Boolean_Expression_1 innehålla både "lika med" och "inte lika med" operatorn som A = B, A != B.

Kapslad CASE: CASE in IF ELSE

Vi kan använda CASE inuti OM ANNAT. Nedan är exempel på MS-SQL-koden

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

I exemplet ovan är CASE NESTAD inuti IF…ELSE-satsen:

Först kommer IF-utlåtandet att köras och om ärendet är i SQL-server är False kommer ELSE-satsen att köras.

Annars innehåller kapslad CASE-sats i SQL inuti den. Beroende på flygbiljettens värde kommer ett av följande resultat att visas:

  • Systemet kommer att skriva ut "Besök närliggande turistplats" om flygbiljetterna är > $400
  • Systemet kommer att skriva ut "Visit Los Angeles" om flygbiljetterna är MELLAN $0 OCH $100
  • Systemet kommer att skriva ut "Visit New York" om flygbiljetter är MELLAN $101 OCH $200
  • Systemet kommer att skriva ut "Visit Europe" om flygbiljetterna är MELLAN $201 OCH $400

Kapslade CASE i SQL Server

Kapslad CASE: CASE inuti CASE

Vi kan använda CASE inuti CASE i SQL. Nedan är exempel på MS-SQL-koden

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

I exemplet ovan är CASE NESTAD i en annan CASE-sats:

Systemet börjar med att exekvera det yttre CASE. Om Flight_Ticket < $400 kommer inner CASE att köras.

Beroende på flygbiljettens värde kommer ett av följande resultat att visas:

  • Systemet kommer att skriva ut "Besök närliggande turistplats" om flygbiljetterna är > $400
  • Systemet kommer att skriva ut "Visit Los Angeles" om flygbiljetterna är MELLAN $0 OCH $100
  • Systemet kommer att skriva ut "Visit New York" om flygbiljetter är MELLAN $101 OCH $200
  • Systemet kommer att skriva ut "Visit Europe" om flygbiljetterna är MELLAN $201 OCH $400

Kapslat CASE-exempel i SQL Server

FALL med UPPDATERING

Antagande: Antag att vi har tabellen som 'Guru99' med två kolumner och fyra rader som visas nedan:

CASE med UPPDATERING i SQL Server

Vi kommer att använda tabellen "Guru99" i ytterligare exempel

Vi kan använda CASE med UPDATE. Nedan är exempel på MS-SQL-koden:

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
	)

I exemplet ovan används CASE i UPDATE-satsen.

Beroende på Tutorial_Name Value, kommer Tutorial_Name-kolumnen att få uppdateringen med THEN Statement-värdet.

  • Om Tutorial_Name = 'SQL' uppdatera DÅ Tutorial_Name till 'Structured Query language'
  • Om Tutorial_Name = 'PL/SQL' uppdatera DÅ Tutorial_Name till 'Oracle PL/SQL'
  • Om Tutorial_Name = 'MSSQL' uppdatera DÅ Tutorial_Name till 'Microsoft SQL'
  • Om Tutorial_Name = 'Hadoop' uppdatera DÅ Tutorial_Name till 'Apache Hadoop'

CASE med UPPDATERING i SQL Server

Låt oss fråga Guru99-tabellen för att kontrollera det uppdaterade värdet:

CASE med UPPDATERING i SQL Server

FALL med Beställ av

Vi kan använda CASE med Order By. Nedan är exempel på MS-SQL-koden:

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

Här används CASE med Order By.

@Order är satt till 1 och som först NÄR det booleska uttrycket utvärderas till TRUE, väljs Tutorial_ID för Order by Condition

CASE med Order by i SQL Server

Intressanta fakta!

  • CASE kan kapslas i ett annat CASE såväl som i en annan IF…ELSE-sats.
  • Förutom SELECT kan CASE användas med en annan SQL klausul som UPDATE, ORDER BY.

Sammanfattning

  • I MS SQL finns det två typer av CASE: Simple CASE och Searched CASE
  • ELSE är valfritt i CASE-satsen.