Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come utilizzare IF...THEN Logic in SQL Server

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.