Condividi tramite


Utilizzo di CASE

L'espressione CASE consente di valutare diverse condizioni e di restituire un singolo valore per ogni condizione. L'espressione consente, ad esempio, di visualizzare un valore alternativo a seconda del valore di una colonna. Poiché questa modifica dei dati è temporanea, i dati non vengono modificati in modo permanente.

L'espressione CASE è costituita dagli elementi seguenti:

  • Parola chiave CASE.

  • Nome della colonna da trasformare.

  • Clausole WHEN che specificano le espressioni da cercare e clausole THEN che indicano le espressioni di sostituzione corrispondenti.

  • Clausola ELSE facoltativa che definisce l'espressione restituita se nessuna operazione di confronto restituisce TRUE.

  • Parola chiave END.

  • Clausola AS facoltativa che definisce un alias per l'espressione CASE.

L'espressione CASE viene in genere utilizzata per sostituire codici o abbreviazioni con valori più leggibili. Nell'esempio seguente viene utilizzata la funzione CASE per modificare la visualizzazione delle categorie di prodotto per renderle più intuitive.

USE AdventureWorks2008R2;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO

La funzione CASE viene inoltre utilizzata per la classificazione dei dati. Nella query seguente viene utilizzata l'espressione CASE per classificare i prezzi.

USE AdventureWorks2008R2;
GO
SELECT   ProductNumber, Name, 'Price Range' = 
      CASE 
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product
ORDER BY ProductNumber ;
GO

Per ulteriori esempi, vedere CASE (Transact-SQL).