T-SQL的case函数

case函数用于计算条件列表并返回多个可能结果表达式之一,下边我们用例子来说明它的两种用法。假设表Table1的数据如下:

id    name    course    total
1    张三    语文    35
2    张三    数学    45
3    张三    英语    60
4    李四    语文    75
5    李四    数学    90
6    李四    英语    80

我们希望根据分数显示不及格、及格、良或优,我们先构造了如下SQL语句:

Select *,
result=case total
    when 45 then '不及格'
    when 60 then '及格'
    when 75 then '良'
    when 90 then '优'
    else '未知'
end
From Table1

执行结果:

id    name    course    total    result
1    张三    语文    35    未知
2    张三    数学    45    不及格
3    张三    英语    60    及格
4    李四    语文    75    良
5    李四    数学    90    优
6    李四    英语    80    未知

可以看到,上边的case函数是以枚举的方式进行的,当枚举的成员不是有限的时候我们很难去一一列举出来,如上边35显示为未知。下边我们用case函数的另一种方法:

Select *,
result = case
    when total<60 then '不及格'
    when total=60 then '及格'
    when total<80 then '良'
    when total>=80 then '优'
    else '未知'
end
From Table1

执行结果:

id    name    course    total    result
1    张三    语文    35    不及格
2    张三    数学    45    不及格
3    张三    英语    60    及格
4    李四    语文    75    良
5    李四    数学    90    优
6    李四    英语    80    优

需要说明的是,上边两个例子只用于说明case函数的两种用法,而不是用来证明哪种方法比较好,实际运用中我们应根据需要选择使用其中一种。

当然,case函数的魄力还不仅仅于此,假如我们希望在一条记录中显示一个学生各科成绩,应当怎么做呢?试试下边的SQL语句:

Select name as '姓名',
sum(case course when '语文' then total end) as '语文',
sum(case course when '数学' then total end) as '数学',
sum(case course when '英语' then total end) as '英语'
From Table1
Group By name

执行结果:

姓名    语文    数学    英语
李四    75    90    80
张三    35    45    60

神奇吧!

评论: 0 | 引用: 0 | 查看次数: 4756
发表评论
登录后再发表评论!