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的可以很好的將需要的數據單獨顯示在一列里面