我认为这些可能对您有所帮助。
使用带有简单 CASE 表达式的 SELECT 语句
在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
使用带有搜索到的CASE 表达式的SELECT 语句
在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
在ORDER BY 子句中使用CASE
以下示例使用ORDER BY 子句中的CASE 表达式根据给定的列值确定行的排序顺序。在第一个示例中,计算 HumanResources.Employee 表的 SalariedFlag 列中的值。将 SalariedFlag 设置为 1 的员工按 BusinessEntityID 的降序顺序返回。将 SalariedFlag 设置为 0 的员工按 BusinessEntityID 的升序顺序返回。在第二个示例中,当 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;
在UPDATE 语句中使用CASE
以下示例在UPDATE 语句中使用CASE 表达式来确定为将SalriedFlag 设置为0 的员工的VacationHours 列设置的值。从VacationHours 中减去10 小时会得到负值,VacationHours增加40小时;否则,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;
在HAVING 子句中使用CASE
以下示例在HAVING 子句中使用CASE 表达式来限制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;
有关这些示例的详细说明,请访问source。
另请访问here 和here 了解详细示例。