SQL Server heeft een unieke mogelijkheid om real-time programmatische logica uit te voeren op de waarden in uw query. Gebaseerd op deze logische evaluaties, kunt u verschillende waarden genereren als onderdeel van de geretourneerde data set.
Gebruik de CASE Statement
Dit is het makkelijkst te bereiken in alle versies van SQL Server met behulp van het CASE
statement, dat fungeert als een logische IF...THEN...ELSE
expressie en verschillende waarden retourneert afhankelijk van het resultaat.
In het onderstaande voorbeeld willen we een extra locale
kolom teruggeven die aangeeft of ons boek zich in Midden-aarde afspeelt of in 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 het speciale CASE
aspect van deze verklaring gaan onderzoeken, laten we tijdelijk de CASE
verwijderen om op te merken dat dit aan de oppervlakte een uiterst eenvoudige SELECT
verklaring is:
SELECT books.*FROM books
Laten we daarom eens onderzoeken hoe de CASE
-sectie is opgebouwd en welk logisch gedrag we uitvoeren.
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 het CASE
-statement en geven we vervolgens aan onder welke voorwaarden (WHEN
) ons CASE
-statement een resultaat moet evalueren. In dit voorbeeld onderzoeken we de books.title
en books.primary_author
; als een van beide in ons Tolkien-esque thema past, THEN
geven we de waarde ‘Midden-aarde’ terug. Als geen van beide velden overeenkomt met onze zoekopdracht, retourneren we in plaats daarvan de waarde ‘Aarde.’
Om de logica te herschikken als een psuedo-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 belangrijk te onthouden dat een CASE
-instructie altijd aan het einde moet worden aangevuld met een bijpassende END
-instructie. 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
-functie heeft geïntroduceerd. 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.
Herstructureren van ons bovenstaande voorbeeld 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 een groot deel van de syntactische suiker uit het CASE
statement door een paar eenvoudige komma-seperatoren om onze argumenten te onderscheiden.
Al met al, zowel CASE
en IIF
doen hetzelfde werk, maar als je de keus krijgt, is IIF
over het algemeen veel eenvoudiger in gebruik.