case具有两种格式。简单case函数和case搜索函数。
</>code
- --简单case函数
- case sex
- when '1' then '男'
- when '2' then '女’
- else '其他' end
- --case搜索函数
- case when sex = '1' then '男'
- when sex = '2' then '女'
- else '其他' end
这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。
还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。
</>code
- --比如说,下面这段sql,你永远无法得到“第二类”这个结果
- case when col_1 in ('a','b') then '第一类'
- when col_1 in ('a') then '第二类'
- else '其他' end
下面实例演示:
首先创建一张users表,其中包含id,name,sex三个字段,表内容如下:
SQL> drop table users purge;</>code
1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:
</>code
- SQL> select u.id,u.name,u.sex,
- (case u.sex
- when 1 then '男'
- when 2 then '女'
- else '空的'
- end
- )性别
- from users u;
- ID NAME SEX 性别
- --------------------------------------- -------------------- ---------- ------
- 张一 空的
- 张二 1 男
- 张三 空的
- 张四 空的
- 张五 2 女
- 张六 1 男
- 张七 2 女
- 张八 1 男
- rows selected
2、如果不希望列表中出现"sex"列,语句如下:
</>code
- SQL> select u.id,u.name,
- (case u.sex
- when 1 then '男'
- when 2 then '女'
- else '空的'
- end
- )性别
- from users u;
- ID NAME 性别
- --------------------------------------- -------------------- ------
- 张一 空的
- 张二 男
- 张三 空的
- 张四 空的
- 张五 女
- 张六 男
- 张七 女
- 张八 男
- rows selected
3、将sum与case结合使用,可以实现分段统计。
如果现在希望将上表中各种性别的人数进行统计,sql语句如下:
SQL> select</>code
总结:
第一种 格式 : 简单Case函数 :
格式说明
case 列名
when 条件值1 then 选择项1
when 条件值2 then 选项2.......
else 默认值 end
eg:
select
case job_level
when '1' then '1111'
when '2' then '1111'
when '3' then '1111'
else 'eee' end
from dbo.employee
第二种 格式 :Case搜索函数
格式说明
case
when 列名= 条件值1 then 选择项1
when 列名=条件值2 then 选项2.......
else 默认值 end
eg:
update employee
set e_wage =
case
when job_level = '1' then e_wage*1.97
when job_level = '2' then e_wage*1.07
when job_level = '3' then e_wage*1.06
else e_wage*1.05
end
提示:通常我们在写Case When的语句的时候,会容易忘记 end 这个结束,一定要记得哟!
比较: 两种格式,可以实现相同的功能。
简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。还有一个需要注意的问题,Case函数只返回第一个符合条件的 值,剩下的Case部分将会被自动忽略。
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛