Ich denke, diese für Sie hilfreich sein könnten.
eine SELECT
Aussage mit einem einfachen CASE
Ausdruck Mit
Innerhalb einer SELECT
Anweisung, ein einfacher CASE
Ausdruck für nur eine Gleichheitsprüfung ermöglicht; keine anderen Vergleiche werden gemacht. Im folgenden Beispiel wird der Ausdruck CASE
verwendet, um die Anzeige von Produktlinienkategorien zu ändern, um sie verständlicher zu machen.
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
Mit einer SELECT
Anweisung mit einem gesucht CASE
Ausdruck
Innerhalb einer SELECT
Aussage, der gesuchten CASE
Ausdruck ermöglicht Werte in der Ergebnismenge auf Vergleichswert basierend ersetzt werden. Im folgenden Beispiel wird der Listenpreis als Textkommentar basierend auf der Preisspanne für ein Produkt angezeigt.
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
Verwendung CASE
in einer Klausel ORDER BY
Die folgenden Beispiele verwenden die CASE
Expression in einer Klausel ORDER BY
die Sortierreihenfolge der Zeilen auf einem gegebenen Spaltenwert zu bestimmen. Im ersten Beispiel wird der Wert in der Spalte SalariedFlag der Tabelle HumanResources.Employee ausgewertet. Mitarbeiter, bei denen das SalariedFlag auf 1 gesetzt ist, werden von der BusinessEntityID in absteigender Reihenfolge zurückgegeben. Mitarbeiter, deren SalariedFlag auf 0 gesetzt ist, werden von der BusinessEntityID in aufsteigender Reihenfolge zurückgegeben. Im zweiten Beispiel wird die Ergebnismenge nach der Spalte TerritoryName sortiert, wenn die Spalte CountryRegionName für alle anderen Zeilen gleich 'United States' und nach CountryRegionName ist.
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;
Verwendung CASE
in einer Anweisung UPDATE
Das folgende Beispiel verwendet die CASE
Expression in einer UPDATE
Anweisung den Wert zu bestimmen, die für die Spaltenvacation für Mitarbeiter eingestellt mit SalariedFlag auf 0 gesetzt, wenn Wenn Sie 10 Stunden von VacationHours subtrahieren, ergibt sich ein negativer Wert, VacationHours wird um 40 Stunden erhöht; Ansonsten wird VacationHours um 20 Stunden erhöht. Die Klausel OUTPUT
wird verwendet, um die Werte für Vorher und Nachher Urlaub anzuzeigen.
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;
Mit CASE
in einer HAVING
Klausel
Das folgende Beispiel verwendet die CASE
Expression in einer HAVING
-Klausel die Zeilen von der SELECT
Anweisung zurück zu beschränken. Die Anweisung gibt den maximalen Stundensatz für jeden Jobtitel in der Tabelle HumanResources.Employee zurück. Die HAVING
Klausel beschränkt die Titel auf diejenigen, die von Männern mit einer maximalen Bezahlung von mehr als 40 Dollar oder Frauen mit einer maximalen Bezahlung von mehr als 42 Dollar gehalten werden.
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;
Weitere Informationen Beschreibung dieser Beispiele finden Sie auf der source.
Besuchen Sie auch here und here für einige Beispiele mit tollen Details.
[Meine Antwort] (http://stackoverflow.com/a/38874485/1045444) zwei Falltypen erklären 1. Einfacher CASE-Ausdruck 2. Gesuchte CASE-Ausdrücke. Und die Fallverwendung beider Typen in SELECT, UPDATE, mit ORDER BY, mit HAVING-Abfragen. –