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











