Articles

SQL CASE Statement-Enkle Og Søkte Skjemaer

hovedformålet MED EN SQL CASE uttrykk returnerer en verdi basert på en eller flere betingede tester. BRUK CASE uttrykk hvor som helst i EN SQL-setning uttrykk er tillatt. Selv om virkelig et uttrykk, noen mennesker refererer til dem som «CASE uttalelser.»Dette stammer mest sannsynlig fra deres bruk i programmeringsspråk.

SQL CASE-uttrykket er ekstremt allsidig og brukes i Hele SQLServer-spørringer. Spesielt brukes DEN I LISTEN VELG kolonne, GRUPPE ETTER, HA og REKKEFØLGE etter klausuler. SAKSUTTRYKKET standardiserer også (forskjønne) data eller utfører kontroller for å beskytte mot feil, for eksempel dividere med null.

alle eksemplene for denne leksjonen er Basert På Microsoft SQL Server Management Studio og AdventureWorks2012-databasen. Komme I GANG MED Å BRUKE SQL Server ved hjelp av min gratis guide Og Gratis Microsoft-verktøy.

SQL Server CASE-Setning

DET er to former FOR SAKEN setningsdelen: enkel og søkte. Begge skjemaene returnerer et resultat basert på testing av et uttrykk. Selv om det er teknisk uttrykk, ser du mange som refererer til det som en uttalelse.

den enkle SQL CASE-setningen brukes til likestillingstester. Det tester ett uttrykk mot flere verdier, dette gjør det flott for å transformere ett sett med verdier, for eksempel forkortelser til deres tilsvarende lange form.

DEN SØKTE SQL CASE-setningen bruker et mer omfattende uttrykksevalueringsformat. Det er bra når du ønsker å jobbe med dataområder, for eksempel lønnsområder eller aldre.

Vi starter først med det enkle skjemaet, og deretter dekker søkt.

SAKSUTTRYKK Enkel Form

DEN enkle formen for SAKSUTTRYKK sammenligner resultatene av et uttrykk med en rekke tester og returnerer et «resultat» når «testen» returnerer sann.

det generelle skjemaet for et ENKELT SKJEMASAKUTTRYKK er:

CASE expression
WHEN test THEN result

ELSE otherResult
END

ELSE-setningen er valgfri i ET SAKSUTTRYKK. Den returnerer «otherResult» når ingen kamper er gjort OG ANNET er til stede. Hvis DET IKKE er NOE annet i SAKSERKLÆRINGEN, returnerer DET NULL.

ELSE-klausulen er en fin måte å fange dårlige eller uventede dataverdier på, og returnere et annet resultat ENN NULL.

Data Transformation Example

det er flere grunner til å bruke EN CASE-setning. Den første er å transformere data fra ett sett med verdier til et annet. For eksempel, for å vise en ansattes kjønn som «Mann » eller» Kvinne», når dataene dine er kodet som «M» eller «F», bruk ET SAKSUTTRYKK for å teste for enkeltkarakterrepresentasjonen og returnere den tilsvarende lange formen.

eksemplet på dette er:

SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee

Data Standardisering Eksempel

På Samme måte kan du bruke en enkel SAK klausul for å standardisere flere verdier i en. Utvide vårt eksempel kart flere varianter Til Enten Mann eller Kvinne:

du lurer kanskje på om du bare kunne lage en annen tabell i databasen og bruke det til å slå opp verdiene. Jeg vil gjerne være enig i at det ville være best, men i mange situasjoner har du ikke tillatelse til å lage tabeller i databasen. I dette tilfellet er du igjen til vettet EN SELECT statement gir.

Sammendrag

her er noen ting du bør vurdere når du bruker det enkle SAKSUTTRYKKET:

  • Tillater bare likestillingssammenligninger.
  • Evaluerer tester evalueres i den definerte rekkefolgen.
  • Returnerer resultatet som tilsvarer den FØRSTE SANNE testen.
  • hvis ingen treff er gjort, returnerer case NULL med MINDRE ANNET er til stede.

SAKSUTTRYKK Søkte Skjema

søkeskjemaet FOR SAKSUTTRYKK gir mulighet for mer allsidig testing. Bruk den til å evaluere et større utvalg av tester. Faktisk kvalifiserer Ethvert Boolsk uttrykk som en test.

et SØKT FRA KASUSUTTRYKK har dette formatet

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

med det søkte skjemaet, bruk WHEN-klausuler for å evaluere Boolske uttrykk. Resultatet av det FØRSTE SANNE Boolske uttrykket returneres.

Nedenfor er DEN søkte SAKSFORMEN for eksemplet for ansattes kjønn fra forrige avsnitt.

Vi brukte også samme eksempel for simple SQL case-setningen. Jeg gjorde dette slik at du kunne se den subtile forskjellen. Legg merke til at HVER WHEN-setning nå inneholder testen som Et Boolsk uttrykk.

Sammenligning Av ENKLE Og Søkte Skjemaer SQL CASE

her er setningene side om side:

Enkelt versus Søkt SAKSUTTRYKK

jeg pleier å bruke det søkte saksuttrykkformatet i all min sql. Denne grunnen er enkel, jeg må bare huske ett format!

siden vi tester Boolske uttrykk, er DEN søkte SAKSERKLÆRINGEN ikke begrenset til bare likestillingstester. Dette gjør dette skjemaet veldig bra for å sammenligne verdier. Kanskje salgsansvarlig For Adventure Works ønsker å organisere produkter etter prisklasse. Hvordan kan DETTE gjøres MED SQL?

Gitt følgende navn og områder gitt av salgssjefen, kan vi konstruere ET SAKSUTTRYKK for å sammenligne ListPrice til en rekke verdier og deretter returnere riktig prisklasse navn.

case-setningen plasseres I LISTEN VELG kolonne og returnerer en tegnverdi. HER ER SQL som gjør trikset:

Når du kjører denne spørringen, ser Du PriceRange oppført og viser verdier i henhold til områdene som er angitt i SAKSUTTRYKKET:

CASE Setningsresultater

CASE setningsresultater kan også brukes til å forhindre feil. Et godt eksempel er å teste for gyldige verdier i uttrykk som når du deler tall.

Vurder

SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product

denne setningen returnerer meldingen

Divide by zero error encountered.

ved å bruke EN SAKSKLAUSUL kan vi sikre at vi ikke utilsiktet deler med null.

SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product

ET SAKSUTTRYKK kan brukes hvor et uttrykk kan brukes. Dette betyr at du kan bruke den til å returnere et kolonneverdiresultat eller til og med bruke det I EN ORDER BY-klausul.

i det følgende avsnittet vil vi utforske VED HJELP AV SAK I REKKEFØLGE ETTER og GRUPPE etter klausuler.

CASE uttrykk I REKKEFØLGE etter

Fortsetter med salgssjef forespørsel, anta at hun også ønsker å se produktene sortert etter prisklasse og deretter produktnavn. Vi har sett hvordan vi kan vise prisklasser som en kolonne, men hvordan sorterer vi?

Faktisk er Det ganske enkelt. SIDEN CASE er et uttrykk, kan vi bruke DET som en gang av verdiene fra hvilken rekkefølge resultatene. Husk at vi ikke er begrenset til bare å sortere tabellkolonner, vi kan også sortere et uttrykk.

her er spørringen for å sortere etter prisklasse.

Vi kan da legge TIL SAKSOPPGAVE FOR Å VELGE liste for å også vise prisklasse.

som du kan se, begynner ting å bli komplisert. Ser DU HVORDAN SAKSERKLÆRINGEN gjentas i BÅDE SELECT list og ORDER BY? Heldigvis kan vi forenkle dette litt, men fjerne SAKSOPPGAVEN FRA ORDER BY OG erstatte DEN med SELECT list CASE expressions aliasnavn PriceRange som så:

CASE expression I GROUP BY

Nå som vi har gitt salgssjefen en detaljert liste hun vil se sammendragsdata-slutter det aldri? I min erfaring gjør det ikke, så å vite mye SQL for å tilfredsstille kundenes krav er nøkkelen til suksess.uansett, den gode nyheten er at vi kan bruke SAKSUTTRYKKET vi har bygget for å lage sammendragsgrupper. I FØLGENDE SQL grupperer vi dataene etter PriceRange. Sammendragsstatistikk på minimum, maksimum Og gjennomsnittlig Listepris opprettes.

I Motsetning TIL ORDER BY-klausulen, kan vi ikke referere til kolonnealiaset PriceRange I GRUPPEN BY. HELE SAKSUTTRYKKET må gjentas. Her er resultatene av vår spørring:

Resultater – SAKSUTTRYKK I GRUPPE ETTER

Pakk opp

som du kan se, bruker SAKSUTTRYKK allsidighet TIL SQL-setningene dine. De lar deg ikke bare transformere data fra ett sett med verdier til et annet, men kan også brukes til å sikre at setninger ikke returnerer feil.

Ut av de to skjemaene, enkle og søkte, pleier jeg å bruke søkeskjemaet. Årsaken er at den enkle formen er begrenset til likestillingstester; mens det søkte skjemaet kan gjøre det og mer.

SIDEN KASUSUTTRYKK er uttrykk og ikke setninger eller klausuler, kan DE brukes der andre uttrykk brukes. Det betyr at du kan bruke HELE SELECT-setningen og andre steder I SQL.