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.