SQL Server ha una capacità unica che ti permette di eseguire in tempo reale la logica programmatica sui valori all’interno della tua query. Sulla base di queste valutazioni logiche, è possibile generare vari valori come parte del set di dati restituito.
Utilizzando l’istruzione CASE
Questo è più facilmente realizzabile in tutte le versioni di SQL Server utilizzando l’istruzione CASE
, che agisce come espressione logica IF...THEN...ELSE
e restituisce vari valori a seconda del risultato.
In questo esempio qui sotto, vogliamo restituire un’ulteriore colonna locale
che specifica se il nostro libro si svolge nella Terra di Mezzo o nella normale vecchia Terra.
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 l’aspetto speciale CASE
di questa dichiarazione, rimuoviamo temporaneamente il CASE
per notare che questa è una dichiarazione estremamente semplice SELECT
in superficie:
SELECT books.*FROM books
Dunque, esaminiamo come è strutturata la sezione CASE
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 iniziare, inizializziamo l’istruzione CASE
poi specifichiamo sotto quali condizioni (WHEN
) la nostra istruzione CASE
dovrebbe valutare un risultato. In questo esempio, stiamo esaminando i campi books.title
e books.primary_author
; se entrambi corrispondono al nostro tema tolkieniano, THEN
restituiamo il valore ‘Terra di Mezzo’. Se nessuno dei due campi corrisponde alla nostra ricerca, restituiamo invece il valore ‘Terra.’
Per riorganizzare la logica come una dichiarazione psuedo-codice IF...THEN...ELSE
, 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 una dichiarazione CASE
deve sempre essere aggiunta alla fine con una dichiarazione END
corrispondente. Nell’esempio precedente, stiamo anche rinominando il valore risultante che viene restituito in locale
, anche se questo è certamente opzionale.
Utilizzando la funzione IIF
Se si utilizza una versione più moderna di SQL, è utile sapere che SQL Server 2012 ha introdotto la funzione molto utile IIF
IIF
è un metodo abbreviato per eseguire un’istruzione IF...ELSE
CASE
e restituire uno dei due valori, a seconda della valutazione del risultato.
Ristrutturare il 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 una funzione IIF
, sostituiamo gran parte dello zucchero sintattico della dichiarazione CASE
con qualche semplice virgola-seperatore per differenziare i nostri argomenti.
Tutto sommato, sia CASE
che IIF
fanno lo stesso lavoro, ma se si può scegliere, IIF
sarà generalmente molto più semplice da usare.