SQL Server har en unik förmåga att tillåta dig att exekvera programmatisk logik i realtid på värdena i din fråga. Baserat på dessa logiska utvärderingar kan du generera olika värden som en del av den returnerade datamängden.
Använda CASE-utlåtandet
Detta görs enklast i alla versioner av SQL Server med CASE
sats, som fungerar som en logisk IF...THEN...ELSE
uttryck och returnerar olika värden beroende på resultatet.
I det här exemplet nedan vill vi returnera ytterligare en locale
kolumn som anger om vår bok utspelar sig i Midgård eller vanliga gamla jorden.
SELECT
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale,
books.*
FROM
books
Innan vi undersöker det speciella CASE
aspekt av detta uttalande, låt oss tillfälligt ta bort CASE
att lägga märke till att detta är en extremt enkel SELECT
uttalande på ytan:
SELECT
books.*
FROM
books
Låt oss därför undersöka hur CASE
avsnittet är strukturerat och vilket logiskt beteende vi utför.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Till att börja med initialiserar vi CASE
ange sedan under vilka villkor (WHEN
) vårt CASE
uttalande bör utvärdera ett resultat. I det här exemplet undersöker vi books.title
och books.primary_author
; om någon av dem passar vårt Tolkien-liknande tema, THEN
vi returnerar värdet 'Middle-earth'. Om inget av fälten matchar vår sökning returnerar vi istället värdet på 'Earth'.
Att ordna om logiken som en pseudo-kod IF...THEN...ELSE
uttalande, ber vi helt enkelt SQL att utvärdera:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Slutligen är det viktigt att komma ihåg att ett CASE
sats måste alltid läggas till i slutet med en matchande END
påstående. I exemplet ovan döper vi också om det resulterande värdet som returneras till locale
, även om det verkligen är valfritt.
Använda IIF-funktionen
Om du använder en modernare version av SQL är det bra att veta att SQL Server 2012 introducerade den mycket praktiska IIF
fungera. IIF
är en förkortningsmetod för att utföra en IF...ELSE
/CASE
uttalande och returnera ett av två värden, beroende på utvärderingen av resultatet.
Omstrukturerar vårt exempel ovan för att använda IIF
är ganska enkelt.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Med en IIF
funktion ersätter vi till stor del mycket av det syntaktiska sockret från CASE
uttalande med några enkla kommatecken för att skilja våra argument åt.
Allt sagt, båda CASE
och IIF
få samma jobb gjort, men om du får välja IIF
kommer i allmänhet att vara mycket enklare att använda.