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.