Articles

SQL CASE Statement – enkla och sökta formulär

huvudsyftet med ett SQL CASE-uttryck returnerar ett värde baserat på en eller flera villkorliga tester. Använd FALLUTTRYCK var som helst i ett SQL-uttryck är tillåtet. Men verkligen ett uttryck, vissa människor hänvisar till dem som ” fall uttalanden.”Detta beror troligen på deras användning i programmeringsspråk.

SQL CASE-uttrycket är extremt mångsidigt och används i hela SQLServer-frågor. I synnerhet används den i Select column list, GROUP BY, HAVING och ORDER BY-klausuler. FALLUTTRYCKET standardiserar också (försköna) data eller utför kontroller för att skydda mot fel, till exempel dividera med noll.

alla exempel på den här lektionen är baserade på Microsoft SQL Server Management Studio och AdventureWorks2012-databasen. Komma igång med SQL Server med min gratis guide och gratis Microsoft-verktyg.

SQL Server CASE Statement

det finns två former för CASE-klausulen: enkel och sökt. Båda formerna returnerar ett resultat baserat på att testa ett uttryck. Även om tekniskt uttryck ser du att många människor hänvisar till det som ett uttalande.

det enkla SQL CASE-uttalandet används för jämställdhetstester. Det testar ett uttryck mot flera värden, vilket gör det bra för att omvandla en uppsättning värden, såsom förkortningar till motsvarande långa form.

den sökta SQL CASE-satsen använder ett mer omfattande uttrycksutvärderingsformat. Det är bra när du vill arbeta med dataintervall, till exempel löneintervall eller åldrar.

Vi börjar först med det enkla formuläret och täcker sedan sökt.

FALLUTTRYCK enkel Form

den enkla formen av FALLUTTRYCKET jämför resultaten av ett uttryck med en serie tester och returnerar ett ”resultat” när ”testet” returnerar true.

den allmänna formen för ett enkelt formuläruttryck är:

CASE expression
WHEN test THEN result

ELSE otherResult
END

else-uttalandet är valfritt i ett FALLUTTRYCK. Den returnerar ”otherresultat” när inga matchningar görs och annat är närvarande. Om det inte finns något annat i fallet, returnerar det NULL.

else-klausulen är ett bra sätt att fånga dåliga eller oväntade datavärden och returnera ett annat resultat än NULL.

Datatransformationsexempel

det finns flera skäl att använda ett FALLUTTALANDE. Den första är att omvandla data från en uppsättning värden till en annan. Till exempel, för att visa en anställds kön som ”man” eller ”kvinna”, när dina data är kodade som ”M” eller ”F”, använd ett FALLUTTRYCK för att testa för enstaka teckenrepresentation och returnera motsvarande långa form.

exemplet för detta är:

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

Data Standardization Example

På samma sätt kan du använda en enkel FALLKLAUSUL för att standardisera flera värden till en. Utöka vårt exempel kartor flera varianter till antingen man eller kvinna:

Du kanske undrar om du bara kunde skapa en annan tabell i din databas och använda det för att slå upp värdena. Jag brukar hålla med om att det skulle vara bäst, men i många situationer har du inte behörighet att skapa tabeller i databasen. I det här fallet lämnas du till din wits ett SELECT-uttalande ger.

sammanfattning

Här är några saker att tänka på när du använder det enkla FALLUTTRYCKET:

  • tillåter endast jämlikhetsjämförelser.
  • utvärderar tester utvärderas i den ordning som definieras.
  • Returnerar resultatet som motsvarar det första sanna testet.
  • Om ingen matchning görs returnerar case NULL om inte annat finns.

sökformulär för FALLUTTRYCK

sökformuläret för FALLUTTRYCKET möjliggör mer mångsidig testning. Använd den för att utvärdera ett större antal tester. Faktum är att varje booleskt uttryck kvalificerar sig som ett test.

ett sökt från FALLUTTRYCK har detta format

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

med det sökta formuläret använder du när-klausuler för att utvärdera booleska uttryck. Resultatet av det första sanna Booleska uttrycket returneras.

nedan är den sökta FALLFORMEN för employee gender example från föregående avsnitt.

Vi använde också samma exempel för det enkla SQL case-uttalandet. Jag gjorde detta så att du kunde se den subtila skillnaden. Lägg märke till att varje WHEN-klausul nu innehåller testet som ett booleskt uttryck.

jämförelse av enkla och sökta formulär SQL CASE

här är uttalandena sida vid sida:

enkelt versus sökt FALLUTTRYCK

Jag brukar använda det sökta falluttrycksformatet i all min SQL. Denna anledning är enkel, Jag behöver bara komma ihåg ett format!

eftersom vi testar booleska uttryck är det sökta fallet inte begränsat till bara jämställdhetstester. Detta gör denna form riktigt bra för att jämföra värden. Kanske vill försäljningschefen för Adventure Works organisera produkter efter prisklass. Hur kan detta göras med SQL?

Med tanke på följande namn och intervall som tillhandahålls av försäljningschefen kan vi konstruera ett FALLUTTRYCK för att jämföra ListPrice med ett värdeområde och sedan returnera lämpligt prisintervallnamn.

ärendeförklaringen placeras i listan Välj kolumn och returnerar ett teckenvärde. Här är SQL som gör tricket:

När du kör den här frågan ser du pricerange listade och visar värden enligt de intervall som anges i ÄRENDEUTTRYCKET:

CASE Statement Results

CASE statements can också användas för att förhindra fel. Ett bra exempel är att testa för giltiga värden inom uttryck som när du delar upp siffror.

Tänk på

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

detta uttalande returnerar meddelandet

Divide by zero error encountered.

genom att använda en FALLKLAUSUL kan vi se till att vi inte oavsiktligt delar med noll.

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

ett FALLUTTRYCK kan användas varhelst ett uttryck kan användas. Det betyder att du kan använda det för att returnera ett kolumnvärderesultat eller till och med använda det i en ORDER BY-klausul.

i följande avsnitt kommer vi att utforska använda CASE i ordning efter och gruppera efter klausuler.

CASE expression i ordning efter

fortsätt med försäljningschefens begäran, anta att hon också vill se produkterna sorterade efter prisklass och sedan Produktnamn. Vi har sett hur vi kan visa prisklasserna som en kolumn, men hur sorterar vi?

faktiskt är det ganska enkelt. Eftersom fall är ett uttryck kan vi använda det som en gång av de värden som beställer resultaten från. Kom ihåg att vi inte är begränsade till att bara Sortera tabellkolumner, vi kan också sortera ett uttryck.

Här är frågan att Sortera efter prisintervallet.

Vi kan sedan lägga till CASE statement för att välja lista för att också visa prisintervallet.

som du kan se börjar saker bli komplicerade. Ser du hur ÄRENDEFÖRKLARINGEN upprepas i både SELECT-listan och ORDER BY? Lyckligtvis kan vi förenkla detta lite, men ta bort ÄRENDEFÖRKLARINGEN från ordern och ersätta den med select list CASE expressions aliasnamn PriceRange som så:

CASE expression in GROUP BY

Nu när vi har gett försäljningschefen en detaljerad lista vill hon se sammanfattningsdata – slutar det aldrig? Enligt min erfarenhet gör det inte, så att veta mycket SQL för att mätta kundernas krav är din nyckel till framgång.

hur som helst, den goda nyheten är att vi kan använda det FALLUTTRYCK vi har byggt för att skapa sammanfattande grupper. I följande SQL grupperar vi data efter PriceRange. Sammanfattande statistik om lägsta, högsta och genomsnittliga Listanpris skapas.

Till skillnad från ORDER BY-klausulen kan vi inte referera till kolumnaliaset PriceRange i gruppen BY. Hela FALLUTTRYCKET måste upprepas. Här är resultaten av vår fråga:

resultat – FALLUTTRYCK i grupp av

Wrap Up

som du kan se, använder FALLUTTRYCK mångsidighet till dina SQL-satser. De låter dig inte bara omvandla data från en uppsättning värden till en annan, men kan också användas för att säkerställa att uttalanden inte returnerar fel.

av de två formerna, enkla och sökta, brukar jag använda sökformuläret. Anledningen är att den enkla formen är begränsad till jämställdhetstester; medan den sökta formen kan göra det och mer.

eftersom FALLUTTRYCK är uttryck och inte uttalanden eller klausuler kan de användas där något annat uttryck används. Det betyder att du kan använda hela SELECT-satsen och någon annanstans i SQL.