Ich denke, diese könnten für Sie hilfreich sein.
Verwenden einer SELECT
Anweisung mit einem einfachen CASE
Ausdruck
Innerhalb einer SELECT
Anweisung ermöglicht ein einfacher CASE
Ausdruck nur eine Gleichheitsprüfung. Es werden keine weiteren Vergleiche durchgeführt. Im folgenden Beispiel wird der CASE
Ausdruck verwendet, um die Anzeige von Produktlinienkategorien zu ändern und 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
Verwenden einer SELECT
Anweisung mit einem gesuchten CASE
Ausdruck
Innerhalb einer SELECT
Anweisung ermöglicht der gesuchte CASE
Ausdruck, dass Werte in der Ergebnismenge basierend auf Vergleichswerten 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 ORDER BY
Klausel
In den folgenden Beispielen wird der CASE
Ausdruck in einer ORDER BY
Klausel verwendet, um die Sortierreihenfolge der Zeilen basierend auf einem bestimmten Spaltenwert zu bestimmen. Im ersten Beispiel wird der Wert in der Spalte SalariedFlag der Tabelle HumanResources.Employee ausgewertet. Mitarbeiter, deren SalariedFlag auf 1 gesetzt ist, werden von der BusinessEntityID in absteigender Reihenfolge in der 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 gleich 'USA' ist, und nach CountryRegionName für alle anderen Zeilen.
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 UPDATE
Anweisung
Im folgenden Beispiel wird der CASE
Ausdruck in einer UPDATE
Anweisung verwendet, um den Wert zu bestimmen, der für die Spalte VacationHours für Mitarbeiter mit SalariedFlag auf 0 festgelegt ist. Wenn das Subtrahieren von 10 Stunden von VacationHours zu einem negativen Wert führt, wird VacationHours um 40 Stunden erhöht. Andernfalls wird die Urlaubszeit um 20 Stunden erhöht. Die OUTPUT
Klausel wird verwendet, um die Werte vor und nach dem 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;
Verwendung CASE
in einer HAVING
Klausel
Im folgenden Beispiel wird der CASE
Ausdruck in einer HAVING
Klausel verwendet, um die von der SELECT
Anweisung zurückgegebenen Zeilen einzuschränken . Die Anweisung gibt den maximalen Stundensatz für jede Berufsbezeichnung in der Tabelle HumanResources.Employee zurück. Die HAVING
Klausel beschränkt die Titel auf diejenigen, die von Männern mit einem Höchstlohn von mehr als 40 Dollar oder von Frauen mit einem Höchstlohn 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 zu diesem Beispiel finden Sie in der Quelle .
Besuchen Sie auch hier und hier einige Beispiele mit vielen Details.