MSSQL中Case函数用法详谈
1、如下表(条件是离散值的情况)
FName Level
Jerry 1
Wander 2
luck 3
输出下表形式的格式:
FName 会员级别
Jerry 普通会员
Wander 高级会员
luck VIP
select FName,
(
case [Level] --Level是数据库中的关键字,用它作为字段的时候,要用[]括起来
when 1 then '普通会员'
when 2 then '高级会员'
when 3 then 'VIP'
end
) as 会员级别
from T_Level
2、条件是在一个范围的情况
select FName,
(
case
when FSalary<2000 then 'Lower'
when FSalary>=2000 and FSalary<=5000 then 'Just so so'
else 'Upper'
end
) as 收入水平
from T_Employee
3、表内容(多列显示):
单号 金额
k1 10
k2 20
k3 -30
k4 -10
输出下表形式的格式:
单号 收入 支出
k1 10 0
k2 20 0
k3 0 30
k4 0 10
select number,
(
case
when amount>=0 then amount else 0
end
) as 收入,
(
case
when amount<0 then ABS(amount) else 0
end
) as 支出
from T_Amount
4、表内容(考虑分组的情况):
Name Score
拜仁 胜
奇才 胜
湖人 胜
拜仁 负
拜仁 负
奇才 胜
输出下表形式的格式:
Name 胜 负
拜仁 1 2
湖人 1 0
奇才 2 0
select Name,
sum
(
case Score
when '胜' then 1 else 0
end
) as 胜,
sum
(
case Score
when '负' then 1 else 0
end
) as 负
from T_Compare
group by Name
因为进行了分组操作,所以要用聚合函数对每一项进行处理。
5、表内容(横表转纵表):
id 科目 成绩
1 语文 70
1 数学 89
1 英语 90
2 语文 82
2 数学 73
输出下表形式的格式:
id 语文 数学 英语
1 70 89 90
2 82 73 0
select id,
sum
(
case 科目
when '语文' then 成绩 else 0
end
) as 语文,
sum
(
case 科目
when '数学' then 成绩 else 0
end
) as 数学,
sum
(
case 科目
when '英语' then 成绩 else 0
end
) as 英语
from T_Class
group by id