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

Oversikt over Case i det virkelige liv!

Igjen, i det virkelige liv utfører vi forskjellige handlinger avhengig av utfallet av forskjellige forhold.

For å utdype mer, vurder eksemplet nedenfor:

  • Hvis flybillettene er mindre enn $100, vil jeg besøke Los Angeles.
  • Hvis flybillettene er mellom $100 til $200, så vil jeg besøke New York
  • Hvis flybillettene er mellom $200 og $400, så vil jeg besøke Europa
  • Ellers vil jeg foretrekke å besøke et turiststed i nærheten.

La oss vurdere å kategorisere tilstand og handling separat fra eksemplet ovenfor nedenfor:

Betingelser – Flybilletter Handlinger utført, bare hvis betingelse er TRUE
Less enn $ 100 Besøk Los Angeles
Mellom $ 100 til $ 200 Besøk New York
Mellom $ 200 til $ 400 Besøk Europa
Ingen av vilkårene ovenfor oppfylte Nærliggende turiststed

I eksemplet ovenfor kan vi se at utfallet av de forskjellige forholdene styrer separat handling. For eksempel vil Visitor utføre handlingen å besøke New York bare i den tilstanden hvis flybilletten er mellom $100 og $200.

På samme måte gir MS SQL CASE-setningen også muligheten til å iverksette tiltak for å utføre forskjellige T-SQL-setninger basert på utfallet av forskjellige forhold.

Hva er CASE Statement i SQL Server?

CASE-uttalelse i SQL Server er utvidelsen av IF…ELSE-setningen. I motsetning til IF…ELSE, hvor kun maksimalt én betingelse er tillatt, lar CASE brukeren bruke flere betingelser for å utføre forskjellige sett med handlinger i MS SQL. Den returnerer en tilsvarende verdi knyttet til betingelsen definert av brukeren.

La oss lære hvordan du bruker Case i SQL og konseptet i de følgende avsnittene.

In MS SQL, det er to typer CASE.

  1. Enkel CASE
  2. Søkte i CASE

Enkel CASE

Syntaksen for 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]

Her

  • Parameteren Case_Expression betegner uttrykket som vi til slutt vil bli sammenlignet med Verdi_1, Verdi_2, ...
  • Parametrene Statement_1, Statement_2… angir erklæringene som vil bli utført hvis Case_Expression = Verdi_1, Kasusuttrykk = Verdi_2, … og så videre.
  • I et nøtteskall, den tilstand er om Case_Expression = Value_N og ACTION er utførelsen av Statement_N hvis resultatet ovenfor er SANN.
  • ALIAS_NAME er valgfritt og er aliasnavnet gitt til SQL Server CASE-setningsresultatet. Brukes mest når vi bruker Case i SQL server select-klausul.

Regler for enkel sak

  • Simple Case tillater bare likhetssjekk av Case_Expression med Value_1 til Value_N.
  • Case_Expression sammenlignes med Value, i rekkefølge fra den første verdien, dvs. Value_1. Nedenfor er utførelsesmetoden:
  • Hvis Case_Expression er ekvivalent med Value_1, hoppes ytterligere WHEN...THEN-setninger over, og CASE-kjøringen AVSLUTERES umiddelbart.
  • Hvis Case_Expression ikke samsvarer med Value_1, sammenlignes Case_Expression med Value_2 for ekvivalens. Denne prosessen med å sammenligne Case_Expression med Value vil fortsette til Case_Expression finner tilsvarende ekvivalent verdi fra settet Value_1, Value_2,...
  • Hvis ingenting samsvarer, går kontrollen til ELSE-setningen, og Statement_Else vil bli utført.
  • ANDET er valgfritt.
  • Hvis ELSE ikke er tilstede og Case_Expression samsvarer med ingen av verdiene, da Null vil vises.

Diagrammet nedenfor illustrerer utførelsesflyten til Simple Case.

Working of Simple Case Statement
Working of Simple Case Statement

Eksempler

Antagelse: Anta at vi har tabellen som 'Guru99' med to kolonner og fire rader som vist nedenfor:

Enkel sak i SQL Server

Vi vil bruke 'Guru99' tabell i ytterligere eksempler

Spørsmål 1: ENKEL CASE med NO ELSE-alternativet

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 nedenfor forklarer utførelsesflyten til en ENKEL CASE uten noe annet.

Enkel sak i SQL Server

Spørsmål 2: ENKEL CASE med alternativet 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.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

Resultat: Diagrammet nedenfor forklarer utførelsesflyten til en ENKEL CASE med ELSE.

Enkel sak i SQL Server

Søkte i CASE

Syntaksen for søkt sak

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]

Her

  • Parameteren Boolean_Expression_1, …angir uttrykket som vil bli evaluert for TRUE eller FALSE.
  • Parametrene Statement_1, Statement_2... angir setningene som vil utføres hvis dets tilsvarende Boolean_Expression_1, Boolean_Expression_2-resultatet er TRUE.
  • I et nøtteskall er Condition Boolean_Expression_1,... og ACTION er utførelsen av Statement_N hvis over boolean_Expression_1 er TRUE.
  • ALIAS_NAME er valgfritt og er aliasnavnet gitt til CASE-setningsresultatet. Mest brukt når vi bruker CASE i select-klausulen.

Regler for søkt sak

  • I motsetning til det enkle tilfellet, er Searched Case ikke begrenset til bare likhetskontroll, men tillater boolsk uttrykk.
  • Det boolske uttrykket evalueres i rekkefølge fra det første boolske uttrykket, dvs. boolsk_uttrykk_1. Nedenfor er utførelsesmetoden:
    • Hvis Boolean_expression_1 er TRUE, hoppes ytterligere WHEN…THEN-setninger over, og CASE-kjøringen AVSLUTERES umiddelbart.
    • Hvis Boolean_expression_1 er FALSE, blir Boolean_expression_2 evaluert for TRUE-tilstand. Denne prosessen med å vurdere boolsk_uttrykk vil fortsette til en av boolsk uttrykk returnerer TRUE.
    • Hvis ingenting samsvarer, går kontrollen til ELSE-setningen, og Statement_Else vil bli utført.
  • Like Simple Case ELSE er også valgfritt i Search-case.
  • Hvis ELSE ikke er tilstede og ingen av Boolean_expression returnerer TRUE, vil Null vises.

Diagram under illustrere utførelsesflyten til Søkte i Case.

Working of Searched Case Statement

Working of Searched Case Statement

Eksempler

Spørsmål 1: SØKT SAKS med alternativet 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

Resultat: Nedenfor diagram forklarer utførelsesflyten av SØKT SAK med INGEN ANNET.

Søkte i CASE-eksempel i SQL Server

Spørsmål 2: SØKT CASE med ELSE alternativet.

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: Nedenfor diagram forklarer utførelsesflyten of den søkte saken med ELLERS.

Søkte i CASE i SQL Server

Forskjellen mellom utførelsestilnærming: ENKEL og SØKECASE.

La oss ta en titt på ENKEL CASE eksempel nedenfor:

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

Her 'Tutorial_name' er en del av CASE-uttrykk i SQL. Da 'Tutorial_name' verdien sammenlignes med hver NÅR verdier, dvs. 'SQL'... til 'Tutorial_name' samsvarer med WHEN-verdier.

Tvert imot, SØKESAK eksempel har nei CASE-uttrykk:

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

Her, hver NÅR-uttalelse har sitt Betinget boolsk uttrykk. hver enkelt boolsk uttrykk dvs. Tutorial_name = 'SQL',... er evaluert for SANN/USANT til første boolske uttrykk som evaluerer til TRUE.

Forskjellen mellom enkel og søkt sak

Enkel sak Søkte i Case
CASE-nøkkelordet blir umiddelbart etterfulgt av CASE_Expression og før WHEN-setningen.

Eg:
SAK
NÅR Verdi_1 DA Utsagn_1...

Saksøkeord etterfølges av WHEN-setningen, og det er ikke noe uttrykk mellom CASE og WHEN.

Eg:
CASE NÅR SÅ Statement_1...

I enkle tilfeller eksisterer VALUE for hver WHEN-setning. Disse verdiene: Value_1, Value_2… Sammenlignes med enkelt CASE_Expression sekvensielt. Resultatet blir evaluert for SANN/USANN-tilstanden for hver NÅR-utsagn.

Eg:
SAK
NÅR Verdi_1 DA Utsagn_1...
NÅR Verdi_2 DA Utsagn_2...

I Searched Case eksisterer Boolean_Expression for hver WHEN-setning. Dette Boolean_Expressions: Boolean_Expression_1, Boolean_Expression_2,... evaluerer TRUE/FALSE-betingelsen for hvert WHEN-utsagn.

Eg:
CASE
NÅR SÅ Statement_1...
NÅR SÅ Statement_2...

Simple Case-støtte kun likestillingssjekk. Dvs om CASE_Expression = VALUE_1, VALUE_2...

Eg:
SAK WHEN Value_1 THEN Statement_1...I eksemplet ovenfor er den eneste operasjonen som utføres av systemet å sjekke om Case_Expression = Value_1

Med Boolean_Expression_N støtter Search Case enhver operasjon som resulterer i en boolsk verdi. Det inkluderer lik og ikke lik operatør.

Eg:
CASE NÅR THEN Statement_1... I eksemplet ovenfor kan Boolean_Expression_1 inneholde både 'lik' og 'ikke lik'-operator som A = B, A != B.

Nestet CASE: CASE i IF ELSE

Vi kan bruke CASE inni HVIS ANNET. Nedenfor er eksempelet 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 eksemplet ovenfor er CASE NESTED i IF…ELSE-setningen:

Først vil IF-erklæringen utføres og hvis sakstilstanden er i SQL-server er falsk, vil ELSE-setningen kjøres.

Ellers inneholder Nested CASE Statement i SQL inne i den. Avhengig av flybillettverdien, vil ett av følgende resultater vises:

  • Systemet vil skrive ut "Besøk nærliggende turiststed" hvis flybillettene er > $400
  • Systemet vil skrive ut "Visit Los Angeles" hvis flybillettene er MELLOM $0 OG $100
  • Systemet vil skrive ut "Besøk New York" hvis flybillettene er MELLOM $101 OG $200
  • Systemet vil skrive ut "Visit Europe" hvis flybillettene er MELLOM $201 OG $400

Nestet CASE i SQL Server

Nestet CASE: CASE inni CASE

Vi kan bruke CASE inne i CASE i SQL. Nedenfor er eksempelet 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 eksemplet ovenfor er CASE NESTED i en annen CASE-setning:

Systemet starter med å utføre den ytre CASE. Hvis Flight_Ticket < $400 vil inner CASE kjøres.

Avhengig av flybillettverdien, vil ett av følgende resultater vises:

  • Systemet vil skrive ut "Besøk nærliggende turiststed" hvis flybillettene er > $400
  • Systemet vil skrive ut "Visit Los Angeles" hvis flybillettene er MELLOM $0 OG $100
  • Systemet vil skrive ut "Besøk New York" hvis flybillettene er MELLOM $101 OG $200
  • Systemet vil skrive ut "Visit Europe" hvis flybillettene er MELLOM $201 OG $400

Nestet CASE-eksempel i SQL Server

CASE med OPPDATERING

Forutsetning: Anta at vi har tabellen som 'Guru99' med to kolonner og fire rader som vist nedenfor:

CASE med OPPDATERING i SQL Server

Vi vil bruke 'Guru99'-tabellen i ytterligere eksempler

Vi kan bruke CASE med UPDATE. Nedenfor er eksempelet 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 eksemplet ovenfor brukes CASE i UPDATE-setningen.

Avhengig av Tutorial_Name Value, vil Tutorial_Name-kolonnen få oppdateringen med THEN Statement-verdi.

  • Hvis Tutorial_Name = 'SQL' SÅ oppdater Tutorial_Name til 'Structured Query language'
  • Hvis Tutorial_Name = 'PL/SQL' SÅ oppdater Tutorial_Name til 'Oracle PL/SQL'
  • Hvis Tutorial_Name = 'MSSQL' SÅ oppdater Tutorial_Name til 'Microsoft SQL'
  • Hvis Tutorial_Name = 'Hadoop' SÅ oppdater Tutorial_Name til 'Apache Hadoop'

CASE med OPPDATERING i SQL Server

La oss spørre Guru99-tabellen for å sjekke den oppdaterte verdien:

CASE med OPPDATERING i SQL Server

CASE med Bestill etter

Vi kan bruke CASE med Order By. Nedenfor er eksempelet 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

Her brukes CASE med Order By.

@Order er satt til 1 og som først NÅR det boolske uttrykket evalueres til TRUE, velges Tutorial_ID for Order by Condition

CASE med Order by i SQL Server

Interessante fakta!

  • CASE kan nestes i en annen CASE så vel som i en annen IF…ELSE-setning.
  • I tillegg til SELECT kan CASE brukes med en annen SQL klausul som UPDATE, ORDER BY.

Sammendrag

  • I MS SQL er det to typer CASE: Simple CASE og Searched CASE
  • ANDET er valgfritt i CASE-setningen.