SQL Server har en unik evne til at give dig mulighed for at udføre real-time programmatisk logik på værdierne i din forespørgsel. Baseret på disse logiske evalueringer kan du generere forskellige værdier som en del af det returnerede datasæt.
Brug af CASE-erklæringen
Dette opnås nemmest i alle versioner af SQL Server ved at bruge CASE
sætning, der fungerer som en logisk IF...THEN...ELSE
udtryk og returnerer forskellige værdier afhængigt af resultatet.
I dette eksempel nedenfor ønsker vi at returnere en yderligere locale
kolonne, der specificerer, om vores bog finder sted i Midgård eller almindelige gamle Jord.
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
Før vi undersøger den særlige CASE
aspekt af denne erklæring, lad os midlertidigt fjerne CASE
at bemærke, at dette er en ekstrem simpel SELECT
udsagn på overfladen:
SELECT
books.*
FROM
books
Lad os derfor undersøge, hvordan CASE
afsnittet er struktureret, og hvilken logisk adfærd vi udfører.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Til at begynde med initialiserer vi CASE
sætning angiv derefter under hvilke betingelser (WHEN
) vores CASE
erklæring skal evaluere et resultat. I dette eksempel undersøger vi books.title
og books.primary_author
; hvis begge passer til vores Tolkien-agtige tema, THEN
vi returnerer værdien 'Middle-earth'. Hvis ingen af felterne matcher vores søgning, returnerer vi i stedet værdien 'Earth'.
At omarrangere logikken som en psuedo-kode IF...THEN...ELSE
sætning, beder vi simpelthen SQL om at evaluere:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Endelig er det vigtigt at huske, at en CASE
sætning skal altid tilføjes i slutningen med en matchende END
udmelding. I ovenstående eksempel omdøber vi også den resulterende værdi, der returneres til locale
, selvom det bestemt er valgfrit.
Brug af IIF-funktionen
Hvis du bruger en mere moderne version af SQL, er det nyttigt at vide, at SQL Server 2012 introducerede den meget praktiske IIF
fungere. IIF
er en stenografimetode til at udføre en IF...ELSE
/CASE
sætning og returnering af en af to værdier, afhængigt af evalueringen af resultatet.
Omstrukturering af vores eksempel ovenfor til at bruge IIF
er ret simpelt.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Med en IIF
funktion erstatter vi stort set meget af det syntaktiske sukker fra CASE
udsagn med et par simple komma-separatorer for at adskille vores argumenter.
Alt i alt, begge CASE
og IIF
få det samme arbejde udført, men hvis du får valget, IIF
vil generelt være meget nemmere at bruge.