木子屋 Dnawo's BLOG

T-SQL的case函数

👤 dnawo 📅 2008-08-06 👁 5410 👍 0 💬 0 🔄 本站原创
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)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 T-SQL使用convert函数对日期进行格式化 下一篇 → 终于解决了输入法问题