case函数有两种格式,即简单case函数和case搜索函数
简单case函数
语法:
case column
when <condition> then value
when <condition> then value
.....
else value end
示例:
case sex
when '1' then '男'
when ‘2’ then '女'
else “其它” end
case搜索函数
语法:
case
when <condition> [, <condition>] then value
when <condition> [, <condition>] then value
....
else value end
示例:
case when sex = ‘1’ then ‘男’
when sex = ‘2’ then “女”
else ‘其它’ end
简单case函数重在简洁,但是它只适用于这种单字段的单值比较,
case搜索函数的优点在于适用于所有比较(包括多值比较)的情况,但case搜索函数只返回第一个符合条件的值,剩下的case部分将会自动忽略;
如下面这段SQL是永远无法得到“第二类”的结果:
case when type in (‘a’, 'b')then '第一类'
when type in (‘a’) then “第二类”
else ‘其他类’ end
case的行转列
case用的比较广泛的 功能就是行转列,即将记录行里的数据按条件转换成具体的列
转换成
select 姓名,
max(case 课程 when N'语文' then 分数 else 0 end)语文,
max(case 课程 when N'数学' then 分数 else 0 end)数学,
max(case 课程 when N'物理' then 分数 else 0 end)物理,
from score
group by 姓名
或者使用最新的语法,
select * from score
pivot (max(分数) for 课程 in (语文,数学,物理))
in:行转列的列部分
max:是聚合in里面的内容,也可以是其它聚合函数:sum,min,count等
pivot:固定写法,是case when的一种简略写法
case的可以很好的将需要的数据单独显示在一列里面