myślę, że to może być pomocne dla Ciebie.
Korzystanie z SELECT
oświadczenie o prostym CASE
ekspresji
ciągu SELECT
oświadczeniu prosty CASE
wyrażenie umożliwia tylko sprawdzenie równości; nie dokonuje się żadnych innych porównań. W poniższym przykładzie użyto wyrażenia CASE
, aby zmienić wyświetlanie kategorii linii produktów, aby były bardziej zrozumiałe.
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
Korzystanie z SELECT
oświadczenie o poszukiwanej CASE
ekspresji
ciągu SELECT
oświadczeniu poszukiwanej CASE
ekspresja pozwala na wartości, które należy wymienić w zestawie wyników na podstawie wartości porównawczych. Poniższy przykład wyświetla cenę z listy jako komentarz tekstowy w oparciu o przedział cenowy produktu.
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
Stosując CASE
w ORDER BY
klauzuli
Następujące przykłady użyto wyrażenia CASE
w klauzuli ORDER BY
określić porządek rzędów na podstawie danej wartości kolumny. W pierwszym przykładzie obliczana jest wartość w kolumnie SalariedFlag tabeli HumanResources.Employee. Pracownicy, którzy mają ustawioną wartość SalariedFlag na 1, są zwracani w kolejności według BusinessEntityID w malejącej kolejności. Pracownicy, którzy mają ustawioną wartość SalariedFlag na 0, są zwracani w kolejności według BusinessEntityID w porządku rosnącym. W drugim przykładzie zestaw wyników jest uporządkowany według kolumny TerritoryName, gdy kolumna CountryRegionName jest równa "United States" i CountryRegionName dla wszystkich innych wierszy.
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;
Korzystanie CASE
w UPDATE
rachunku
W poniższym przykładzie użyto wyrażenia w instrukcji UPDATE
CASE
określić wartość ustawioną dla VacationHours kolumn dla pracowników z SalariedFlag ustawiony na 0. Kiedy odjęcie 10 godzin od VacationHours daje wartość ujemną, VacationHours zwiększa się o 40 godzin; w przeciwnym razie VacationHours zostanie zwiększona o 20 godzin. Klauzula OUTPUT
służy do wyświetlania wartości przed i po urlopie.
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;
Stosując CASE
w HAVING
klauzuli
W poniższym przykładzie użyto wyrażenia CASE
w HAVING
klauzuli ograniczyć wierszy zwróconych przez instrukcję SELECT
. Instrukcja zwraca maksymalną stawkę godzinową dla każdego stanowiska w tabeli HumanResources.Employee. Klauzula HAVING
ogranicza tytuły do tych, które są w posiadaniu mężczyzn z maksymalną stawką wynagrodzenia większą niż 40 dolarów lub kobiet z maksymalną stawką wynagrodzenia większą niż 42 dolarów.
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;
Aby uzyskać więcej informacji, opis tych przykładów znajduje się pod adresem source.
Odwiedź również kilka przykładów z przykładami ze szczegółowymi informacjami na temat here i here.
[Moja odpowiedź] (http://stackoverflow.com/a/38874485/1045444) wyjaśniające dwa typy spraw 1. Proste wyrażenie CASE 2. Wyszukowane wyrażeń CASE. Oraz użycie obu typów w SELECT, UPDATE, ORDER BY, HAVING queries. –