これらはあなたに役立つと思います。
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
して、特定の列の値に基づいて行のソート順を決定しています。最初の例では、HumanResources.EmployeeテーブルのSalariedFlag列の値が評価されます。SalariedFlagが1に設定されている従業員は、BusinessEntityIDによって降順で返されます。SalariedFlagが0に設定されている従業員は、BusinessEntityIDによって昇順で返されます。2番目の例では、列CountryRegionNameが「United States」に等しい場合、結果セットは列TerritoryNameによって並べ替えられ、他のすべての行については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
SalariedFlagが0に設定されている従業員のVacationHours列に設定されている値を決定します。VacationHoursから10時間を減算すると、負の値になります。それ以外の場合、VacationHoursは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
AにHAVING
句
次の例では、句でCASE
式を使用HAVING
して、SELECT
ステートメントによって返される行を制限しています。このステートメントは、HumanResources.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;
これらの例の詳細については、ソースをご覧ください。
また、こことここにアクセスして、詳細な例をいくつか参照してください。