Articles

CASE Statement – Simple og søgte formularer

hovedformålet med et CASE udtryk returnerer en værdi baseret på en eller flere betingede tests. Brug SAGSUDTRYK overalt i et sæt udtryk er tilladt. Selvom virkelig et udtryk, nogle mennesker henvise til dem som ” CASE udsagn.”Dette skyldes sandsynligvis deres brug i programmeringssprog.

SAGSUDTRYKKET er ekstremt alsidigt og bruges i hele forespørgsler. Især bruges den i listen Vælg kolonne, gruppe efter, Have og rækkefølge efter klausuler. SAGSUDTRYKKET standardiserer også (forskønne) data eller udfører kontrol for at beskytte mod fejl, f.eks.

alle eksempler på denne lektion er baseret på Microsoft Server Management Studio og Adventurearbejds2012-databasen. Kom godt i gang med at bruge min gratis guide og gratis Microsoft-værktøjer.

case Statement

der er to former for case-klausulen: enkel og søgt. Begge formularer returnerer et resultat baseret på test af et udtryk. Selvom teknisk udtryk, vil du se mange mennesker henvise til det som en erklæring.

den enkle case-erklæring bruges til ligestillingstest. Det tester et udtryk mod flere værdier, hvilket gør det godt til at omdanne et sæt værdier, såsom forkortelser til deres tilsvarende lange form.

den søgte CASE statement bruger en mere omfattende udtryk evaluering format. Det er godt, når du ønsker at arbejde med dataområder, såsom lønintervaller eller aldre.

Vi starter først ud med den enkle form, og derefter dække søgte.

SAGSUDTRYK simpel Form

den enkle form for SAGSUDTRYKKET sammenligner resultaterne af et udtryk med en række tests og returnerer et “resultat”, når “testen” Returnerer SAND.

den generelle form for et simpelt FORMULARUDTRYK er:

CASE expression
WHEN test THEN result

ELSE otherResult
END

ELSE-sætningen er valgfri i et SAGSUDTRYK. Det returnerer “otheresultat”, når der ikke foretages kampe, og ellers er til stede. Hvis der ikke er noget andet i SAGSOPGØRELSEN, returnerer den NULL.

ELSE-klausulen er en fantastisk måde at fange dårlige eller uventede dataværdier på og returnere et andet resultat end NULL.

eksempel på datatransformation

der er flere grunde til at bruge en SAGSERKLÆRING. Den første er at omdanne data fra et sæt værdier til et andet. For eksempel for at vise en medarbejders køn som” mand “eller” kvinde”, når dine data er kodet som” M “eller” F”, skal du bruge et SAGSUDTRYK til at teste for repræsentationen af et enkelt tegn og returnere den tilsvarende lange form.

eksemplet på dette er:

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

Datastandardiseringseksempel

Tilsvarende kan du bruge en simpel SAGSKLAUSUL til at standardisere flere værdier til en. Udvidelse af vores eksempel kortlægger flere variationer til enten mand eller kvinde:

du undrer dig måske over, om du bare kunne oprette en anden tabel i din database og bruge den til at slå værdierne op. Jeg er tilbøjelig til at være enig i, at det ville være det bedste, men i mange situationer har du ikke tilladelse til at oprette tabeller i databasen. I dette tilfælde er du overladt til din forstand, at en udvalgt erklæring giver.

Resume

Her er nogle ting, du skal overveje, når du bruger det enkle SAGSUDTRYK:

  • tillader kun lighedssammenligninger.
  • evaluerer test evalueres i den definerede rækkefølge.
  • Returnerer resultatet svarende til den første sande test.
  • hvis der ikke foretages nogen match, returnerer case NULL, medmindre andet er til stede.

SAGSUDTRYK søgt formular

SØGEFORMEN til SAGSUDTRYKKET giver mulighed for mere alsidig test. Brug det til at evaluere et større udvalg af tests. Faktisk kvalificerer ethvert boolsk udtryk som en test.

et søgt fra SAGSUDTRYK har dette format

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

med den søgte formular skal du bruge når klausuler til at evaluere boolske udtryk. Resultatet af det første ægte boolske udtryk returneres.

nedenfor er den søgte SAGSFORM for medarbejderkønseksemplet fra det foregående afsnit.

Vi brugte også det samme eksempel til den enkle SAGSOPGØRELSE. Jeg gjorde dette, så du kunne se den subtile forskel. Bemærk, at hver når klausul nu indeholder testen som et boolsk udtryk.

sammenligning af enkle og søgte formularer sag

Her er udsagnene side om side:

simpelt versus søgt CASE udtryk

Jeg har en tendens til at bruge det søgte sagsudtryksformat i alle mine kvm. Denne grund er enkel, Jeg behøver kun at huske et format!

da vi tester boolske udtryk, er den søgte SAGSERKLÆRING ikke begrænset til kun ligestillingstest. Dette gør denne form virkelig god til sammenligning af værdier. Måske ønsker salgschefen for eventyrværker at organisere produkter efter prisklasse. Hvordan kan det gøres med GL?

i betragtning af følgende navne og intervaller leveret af salgschefen kan vi konstruere et SAGSUDTRYK for at sammenligne listeprisen med en række værdier og derefter returnere det relevante prisklassenavn.

sagsopgørelsen er placeret i listen Vælg kolonne og returnerer en tegnværdi. Her er SF, der gør tricket:

når du kører denne forespørgsel, vil du se PriceRange opført og vise værdier i henhold til de områder, der er angivet i SAGSUDTRYKKET:

CASE Statement Results

CASE statements kan bruges til at bruges også til at forhindre fejl. Et godt eksempel er at teste for gyldige værdier inden for udtryk som når du deler tal.

overvej

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

denne erklæring returnerer meddelelsen

Divide by zero error encountered.

Ved at bruge en SAGSKLAUSUL kan vi sikre, at vi ikke utilsigtet deler med nul.

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

et SAGUDTRYK kan bruges, hvor et udtryk kan bruges. Dette betyder, at du kan bruge det til at returnere et kolonneværdiresultat eller endda bruge det i en ordre efter klausul.

i det følgende afsnit undersøger vi brug af sag i rækkefølge efter og gruppe efter klausuler.

SAGSUDTRYK i rækkefølge efter

fortsæt med salgschefanmodningen, Antag, at hun også vil se produkterne sorteret efter prisklasse og derefter Produktnavn. Vi har set, hvordan vi kan vise prisklasserne som en kolonne, men hvordan sorterer vi?

faktisk er det ret nemt. Da sag er et udtryk, kan vi bruge det som en gang af de værdier, hvorfra resultaterne bestilles. Husk, vi er ikke begrænset til bare at sortere tabelkolonner, vi kan også sortere et udtryk.

Her er forespørgslen for at sortere efter prisklassen.

Vi kan derefter tilføje SAGSOPGØRELSE for at vælge liste for også at vise prisklassen.

som du kan se, begynder tingene at blive komplicerede. Kan du se, hvordan SAGSOPGØRELSEN gentages i både SELECT list og ORDER BY? Heldigvis kan vi forenkle dette lidt, men fjerne SAGSOPGØRELSEN fra ordren ved at erstatte den med SELECT list CASE-udtrykets aliasnavn PriceRange som sådan:

CASE – udtryk i GROUP by

nu hvor vi har givet salgschefen en detaljeret liste, vil hun se summariske data-slutter det aldrig? Det er min erfaring, at det ikke gør det, så det er din nøgle til succes at kende masser af KVM til at tilfredsstille kundernes krav.

under alle omstændigheder er den gode nyhed, at vi kan bruge det SAGSUDTRYK, vi har bygget, til at oprette oversigtsgrupper. I det følgende eksempel grupperer vi dataene efter prisinterval. Sammenfattende statistikker om minimum, maksimum og gennemsnitlig listepris oprettes.

I modsætning til order BY-klausulen kan vi ikke henvise til kolonnealiaspricerange i gruppen efter. Hele SAGSUDTRYKKET skal gentages. Her er resultaterne af vores forespørgsel:

resultater – CASE udtryk i gruppe af

pak op

som du kan se, ved hjælp af CASE udtryk tilføjer alsidighed til dine kvm udsagn. De giver dig ikke kun mulighed for at omdanne data fra et sæt værdier til et andet, men kan også bruges til at sikre, at udsagn ikke returnerer fejl.

ud af de to former, enkle og søgte, har jeg en tendens til at bruge søgeformularen. Årsagen er, at den enkle form er begrænset til ligestillingstest; hvorimod den søgte form kan gøre det og mere.

da SAGSUDTRYK er udtryk og ikke udsagn eller klausuler, kan de bruges, hvor ethvert andet udtryk bruges. Det betyder, at du kan bruge hele SELECT-sætningen og andre steder i DK.