Penso che questi potrebbero essere utili per te.
Utilizzo di SELECTun'istruzione con CASEun'espressione semplice
All'interno di SELECTun'istruzione, CASEun'espressione semplice consente solo un controllo dell'uguaglianza; non vengono effettuati altri confronti. L'esempio seguente utilizza l' CASEespressione per modificare la visualizzazione delle categorie della linea di prodotti per renderle più comprensibili.
USE AdventureWorks2012;
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
Utilizzo di SELECTun'istruzione con CASEun'espressione cercata
All'interno di SELECTun'istruzione, l' CASEespressione cercata consente di sostituire i valori nel set di risultati in base ai valori di confronto. L'esempio seguente mostra il prezzo di listino come commento testuale basato sulla fascia di prezzo di un prodotto.
USE AdventureWorks2012;
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
Usando CASEin una ORDER BYclausola
Gli esempi seguenti utilizzano l' CASEespressione in una ORDER BYclausola per determinare l'ordinamento delle righe in base a un determinato valore di colonna. Nel primo esempio, viene valutato il valore nella colonna SalariedFlag della tabella HumanResources.Employee. I dipendenti che hanno impostato SalariedFlag su 1 vengono restituiti in ordine decrescente da BusinessEntityID. I dipendenti che hanno SalariedFlag impostato su 0 vengono restituiti in ordine crescente da BusinessEntityID. Nel secondo esempio, il set di risultati è ordinato dalla colonna TerritoryName quando la colonna CountryRegionName è uguale a "Stati Uniti" e da CountryRegionName per tutte le altre righe.
SELECT BusinessEntityID, SalariedFlag
FROM HumanResources.Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
GO
SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
ELSE CountryRegionName END;
Usando CASEin una UPDATEdichiarazione
L'esempio seguente utilizza l' CASEespressione in UPDATEun'istruzione per determinare il valore impostato per la colonna VacationHours per i dipendenti con SalariedFlag impostato su 0. Quando si sottrae 10 ore da VacationHours si ottiene un valore negativo, VacationHours viene aumentato di 40 ore; in caso contrario, VacationHours viene aumentato di 20 ore. La OUTPUTclausola viene utilizzata per visualizzare i valori di ferie prima e dopo le vacanze.
USE AdventureWorks2012;
GO
UPDATE HumanResources.Employee
SET VacationHours =
( CASE
WHEN ((VacationHours - 10.00) < 0) THEN VacationHours + 40
ELSE (VacationHours + 20.00)
END
)
OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue,
Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0;
Usando CASEin una HAVINGclausola
L'esempio seguente utilizza l' CASEespressione in una HAVINGclausola per limitare le righe restituite SELECTdall'istruzione. L'istruzione restituisce la tariffa oraria massima per ciascun titolo di lavoro nella tabella HumanResources.Employee. La HAVINGclausola limita i titoli a quelli detenuti da uomini con un tasso di paga massimo superiore a 40 dollari o donne con un tasso di paga massimo superiore a 42 dollari.
USE AdventureWorks2012;
GO
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
FROM HumanResources.Employee AS e
JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
GROUP BY JobTitle
HAVING (MAX(CASE WHEN Gender = 'M'
THEN ph1.Rate
ELSE NULL END) > 40.00
OR MAX(CASE WHEN Gender = 'F'
THEN ph1.Rate
ELSE NULL END) > 42.00)
ORDER BY MaximumRate DESC;
Per maggiori dettagli descrizione di questi esempi visita la fonte .
Visita anche qui e qui per alcuni esempi con grandi dettagli.