Penso che questi potrebbero essere utili per te.
Utilizzo di SELECT
un'istruzione con CASE
un'espressione semplice
All'interno di SELECT
un'istruzione, CASE
un'espressione semplice consente solo un controllo dell'uguaglianza; non vengono effettuati altri confronti. L'esempio seguente utilizza l' CASE
espressione 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 SELECT
un'istruzione con CASE
un'espressione cercata
All'interno di SELECT
un'istruzione, l' CASE
espressione 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 CASE
in una ORDER BY
clausola
Gli esempi seguenti utilizzano l' CASE
espressione in una ORDER BY
clausola 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 CASE
in una UPDATE
dichiarazione
L'esempio seguente utilizza l' CASE
espressione in UPDATE
un'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 OUTPUT
clausola 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 CASE
in una HAVING
clausola
L'esempio seguente utilizza l' CASE
espressione in una HAVING
clausola per limitare le righe restituite SELECT
dall'istruzione. L'istruzione restituisce la tariffa oraria massima per ciascun titolo di lavoro nella tabella HumanResources.Employee. La HAVING
clausola 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.