Я думаю, що це може бути для вас корисним.
Використання SELECT
висловлювання з простим CASE
виразом
Всередині SELECT
висловлювання простий CASE
вираз допускає лише перевірку рівності; інших порівнянь не проводиться. У наступному прикладі CASE
вираз використовується для зміни відображення категорій ліній продуктів, щоб зробити їх більш зрозумілими.
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
Використання SELECT
заяви з CASE
виразом, що шукається
В рамках SELECT
оператора вираз, що шукається, CASE
дозволяє замінювати значення у наборі результатів на основі значень порівняння. У наступному прикладі відображається ціна списку у вигляді текстового коментаря на основі цінового діапазону товару.
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
Використання CASE
в ORDER BY
пункті
Наступні приклади використовують CASE
вираз у ORDER BY
пункті для визначення порядку сортування рядків на основі заданого значення стовпця. У першому прикладі оцінюється значення в стовпці SalariedFlag таблиці HumanResources.E Employee. Співробітники, у яких SalariedFlag встановлено 1, повертаються в порядку BusinessEntityID у порядку зменшення. Співробітники, для яких SalariedFlag встановлено 0, повертаються в порядку BusinessEntityID у порядку зростання. У другому прикладі набір результатів впорядковується стовпцем TerritoryName, коли стовпець CountryRegionName дорівнює "Сполучені Штати" та CountryRegionName для всіх інших рядків.
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;
Використання CASE
у UPDATE
виписці
Наступний приклад використовує CASE
вираз у UPDATE
виписці, щоб визначити значення, встановлене для стовпця VacationHours для співробітників із SalariedFlag, встановленим на 0. При відніманні 10 годин від VacationHours приводиться до від’ємного значення, VacationHours збільшується на 40 годин; в іншому випадку вакансії збільшуються на 20 годин. Ця OUTPUT
стаття використовується для відображення значень до відпустки та після неї.
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;
Використання CASE
в HAVING
пункті
У наступному прикладі використовується CASE
вираз у HAVING
пункті для обмеження рядків, повернених у SELECT
операторі. Виписка повертає максимальну погодинну ставку для кожного найменування роботи в таблиці HumanResources.E Employee. HAVING
Пункт обмежує назви тим , які займають чоловіки з максимальною більшою швидкістю , ніж платити 40 доларів або жінки з більшою швидкістю , ніж платити максимальний 42 доларів.
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;
Більш детально опис цього прикладу відвідайте джерело .
Також завітайте сюди і сюди, щоб отримати кілька прикладів із великими подробицями.