一、CASE 函数是特殊的 Transact-SQL 表达式,它允许按列值显示可选值。数据中的更改是临时的,没有对数据进行永久更改。例如,CASE 函数可以在查询结果集中将 state 列的值为 CA 的行显示为 California。
CASE 函数的组成部分:
CASE 关键字。
需要转换的列名称。
指定搜索内容表达式的 WHEN 子句和指定要替换它们的表达式的 THEN 子句。
END 关键字。
可选的、定义 CASE 函数别名的 AS 子句。
以下示例将在查询结果集中显示 AdventureWorks 数据库中 Executive and General Administration 组的每个部门的两字母缩写:
USE AdventureWorks GO SELECT Name, CASE Name WHEN 'Human Resources' THEN 'HR' WHEN 'Finance' THEN 'FI' WHEN 'Information Services' THEN 'IS' WHEN 'Executive' THEN 'EX' WHEN 'Facilities and Maintenance' THEN 'FM' END AS Abbreviation FROM AdventureWorks.HumanResources.Department WHERE GroupName = 'Executive General and Administration'
1、CASE 函数用于计算多个条件并为每个条件返回单个值。CASE 函数通常的用途是将代码或缩写替换为可读性更强的值。下面的示例使用 CASE
函数更改产品系列类别的显示,以使这些类别更易理解。
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;
2、CASE 函数的另一个用途是对数据进行分类。以下查询使用 CASE
函数对价格进行分类。
USE AdventureWorks;
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
3、 case when then 中判断null的方法
Sql Server 中使用case when then 判断某字段是否为null,和判断是否为字符或数字时的写法不一样,如果不注意,很容易搞错
<span style="font-family: Arial, Helvetica, sans-serif;">错误方法: CASE columnName WHEN null THEN 0 ELSE columnName END 正确方法: CASE WHEN columnName is null THEN 0 ELSE columnName END </span>