SQL之case when then用法详解

case具有两种格式。简单case函数和case搜索函数。

1 --简单case函数  
2 case sex  
3   when '1' then ''  
4   when '2' then '女’  
5   else '其他' end  
6 --case搜索函数  
7 case when sex = '1' then ''  
8      when sex = '2' then ''  
9      else '其他' end

这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。

还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

实例演示:
首先创建一张users表,其中包含id,name,sex三个字段,表内容如下:

ID        NAME                 SEX
---------- -------------------- ----------
1          张一                 
2          张二                 1
3          张三                 
4          张四                
5          张五                 2
6          张六                 1
7          张七                 2
8          张八                 1

1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:
1 select u.id,u.name,u.sex,  
2   (case u.sex  
3    when 1 then ''  
4    when 2 then ''  
5    else '空的'  
6    end  
7    )性别  
8 from users u;
ID NAME                        SEX 性别
--------------------------------------- 
1 张一                              空的
2 张二                          1   男
3 张三                              空的
4 张四                              空的
5 张五                          2   女
6 张六                          1   男
7 张七                          2   女
8 张八                          1   男

2. 将sum与case结合使用,可以实现分段统计。
    如果现在希望将上表中各种性别的人数进行统计,sql语句如下:

 1 select
 2   sum(case u.sex when 1 then 1 else 0 end) 男性,
 3   sum(case u.sex when 2 then 1 else 0 end) 女性,
 4   sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空
 5 from users u;
 6  
 7         男性     女性       性别为空
 8 ---------- ---------- ----------
 9          3        2          0
10 
11 --------------------------------------------------------------------------------
12 select
13   count(case when u.sex=1 then 1 end)男性,
14   count(case when u.sex=2 then 1 end)女,
15   count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空
16 from users u;
17  
18       男性         女     性别为空
19 ---------- ---------- ----------
20        3          2          0

猜你喜欢

转载自www.cnblogs.com/rxhuiu/p/9134103.html