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.
- Enkelt FALL
- 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.
Exempel
Antagande: Antag att vi har tabellen som "Guru99" med två kolumner och fyra rader som visas nedan:
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.
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.
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.
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.
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.
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: |
Case-nyckelordet följs av WHEN-satsen, och det finns inget uttryck mellan CASE och WHEN.
T.ex: |
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: |
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: |
Simple Case stöder endast jämställdhetskontroll. Dvs om CASE_Expression = VALUE_1, VALUE_2...
T.ex: |
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: |
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
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
FALL med UPPDATERING
Antagande: Antag att vi har tabellen som 'Guru99' med två kolumner och fyra rader som visas nedan:
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'
Låt oss fråga Guru99-tabellen för att kontrollera det uppdaterade värdet:
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
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.