SQL Server ha una capacità unica di consentire di eseguire logica programmatica in tempo reale sui valori all'interno della query. Sulla base di tali valutazioni logiche, puoi generare vari valori come parte del set di dati restituito.
Utilizzo dell'istruzione CASE
Ciò si ottiene più facilmente in tutte le versioni di SQL Server utilizzando il CASE
istruzione, che funge da IF...THEN...ELSE
logico espressione e restituisce vari valori a seconda del risultato.
In questo esempio di seguito, vogliamo restituire un ulteriore locale
colonna che specifica se il nostro libro si svolge nella Terra di Mezzo o nella vecchia Terra normale.
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
Prima di esaminare lo speciale CASE
aspetto di questa affermazione, rimuoviamo temporaneamente il CASE
notare che questo è un SELECT
estremamente semplice dichiarazione in superficie:
SELECT
books.*
FROM
books
Pertanto, esaminiamo come il CASE
è strutturata e quale comportamento logico stiamo eseguendo.
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Per cominciare, inizializziamo il CASE
istruzione quindi specificare a quali condizioni (WHEN
) il nostro CASE
dichiarazione dovrebbe valutare un risultato. In questo esempio, stiamo esaminando il books.title
e books.primary_author
; se uno dei due si adatta al nostro tema tolkieniano, THEN
restituiamo il valore "Terra di mezzo". Se nessuno dei due campi corrisponde alla nostra ricerca, restituiamo invece il valore di "Terra".
Per riorganizzare la logica come pseudo-codice IF...THEN...ELSE
istruzione, stiamo semplicemente chiedendo a SQL di valutare:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Infine, è fondamentale ricordare che un CASE
l'istruzione deve sempre essere aggiunta alla fine con un END
corrispondente dichiarazione. Nell'esempio precedente, stiamo anche rinominando il valore risultante che viene restituito a locale
, anche se è certamente facoltativo.
Utilizzo della funzione IIF
Se stai utilizzando una versione più moderna di SQL, è utile sapere che SQL Server 2012 ha introdotto il praticissimo IIF
funzione. IIF
è un metodo abbreviato per eseguire un IF...ELSE
/CASE
istruzione e restituendo uno dei due valori, a seconda della valutazione del risultato.
Ristrutturazione del nostro esempio precedente per utilizzare IIF
è abbastanza semplice.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Con un IIF
funzione, sostituiamo in gran parte molto dello zucchero sintattico dal CASE
dichiarazione con alcuni semplici separatori di virgole per differenziare i nostri argomenti.
Tutto sommato, entrambi CASE
e IIF
fai lo stesso lavoro, ma se hai la possibilità di scegliere, IIF
sarà generalmente molto più semplice da usare.