SQL Server heeft de unieke mogelijkheid om programmatische logica in realtime uit te voeren op de waarden in uw query. Op basis van die logische evaluaties kunt u verschillende waarden genereren als onderdeel van de geretourneerde dataset.
De CASE-statement gebruiken
Dit wordt het gemakkelijkst bereikt in alle versies van SQL Server met behulp van de CASE
statement, dat fungeert als een logische IF...THEN...ELSE
expressie en geeft verschillende waarden terug, afhankelijk van het resultaat.
In dit voorbeeld hieronder willen we een extra locale
. teruggeven kolom die aangeeft of ons boek zich afspeelt in Midden-aarde of de gewone oude aarde.
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
Voordat we de speciale CASE
onderzoeken aspect van deze verklaring, laten we tijdelijk de CASE
om op te merken dat dit een uiterst eenvoudige SELECT
. is verklaring aan de oppervlakte:
SELECT
books.*
FROM
books
Laten we daarom eens kijken hoe de CASE
sectie is gestructureerd en welk logisch gedrag we vertonen.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Om te beginnen, initialiseren we de CASE
statement specificeer dan onder welke voorwaarden (WHEN
) onze CASE
verklaring moet een resultaat evalueren. In dit voorbeeld onderzoeken we de books.title
en books.primary_author
; als een van beide bij ons Tolkien-achtige thema past, THEN
we retourneren de waarde 'Midden-aarde'. Als geen van beide velden overeenkomt met onze zoekopdracht, retourneren we in plaats daarvan de waarde van 'Aarde'.
Om de logica te herschikken als een pseudo-code IF...THEN...ELSE
statement, vragen we SQL gewoon om te evalueren:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Ten slotte is het van cruciaal belang om te onthouden dat een CASE
statement moet altijd worden toegevoegd aan het einde met een overeenkomende END
uitspraak. In het bovenstaande voorbeeld hernoemen we ook de resulterende waarde die wordt geretourneerd naar locale
, hoewel dat zeker optioneel is.
De IIF-functie gebruiken
Als u een modernere versie van SQL gebruikt, is het handig om te weten dat SQL Server 2012 de zeer handige IIF
heeft geïntroduceerd. functie. IIF
is een verkorte methode voor het uitvoeren van een IF...ELSE
/CASE
statement en het retourneren van een van de twee waarden, afhankelijk van de evaluatie van het resultaat.
Ons bovenstaande voorbeeld herstructureren om IIF
te gebruiken is vrij eenvoudig.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Met een IIF
functie, vervangen we grotendeels veel van de syntactische suiker uit de CASE
verklaring met een paar eenvoudige kommascheidingstekens om onze argumenten te onderscheiden.
Alles bij elkaar genomen, beide CASE
en IIF
dezelfde klus klaren, maar als je de keuze krijgt, IIF
zal over het algemeen veel eenvoudiger te gebruiken zijn.