SQL中case when then 用法

case的使用格式:

------简单case函数
CASE sex WHEN 1 THEN '男'
         WHEN 2 THEN '女'
         ELSE '未知'
END

------case搜索函数:
CASE WHEN sex=1 THEN '男'
     WHEN sex=2 THEN '女'
     ELSE '未知'
END

PS:case判断语句只要满足符合条件的语句,剩下的case部分会自动忽略。就如java中的else if差不多。

---比如说这个列子 sex要是12的,他只会显示“已填写性别” 下面的判断不走
CASE WHEN sex in (1,2) THEN '已填写性别'
     WHEN sex in (1) THEN '男'
     WHEN sex in (2) THEN '女'
     ELSE'未知'
END

下面实例案列:
首先创一张test表,字段 id,name,sex,代码如下:

SQL>create table "test" 
(
   id                   int                            not null,
   name                 varchar(20)                    not null,
   sex                  int                            null
);

SQL>insert into test(id,name,sex)
            VALUES(1,'赵一',1),
                  (2,'赵二',1),
                  (3,'赵三',2),
                  (4,'赵四',2),
                  (5,'赵五',2);

SQL>insert into test(id,name)
            VALUES(6,'赵六'),
                  (7,'赵七'),
                  (8,'赵八');
----------sex:1表示男,2表示女,空表示未知
SQL>select * from test;
                            id    name    sex
                    ------------------------------
                            1     赵一     1
                            2     赵二     1
                            3     赵三     2
                            4     赵四     2
                            5     赵五     2
                            6     赵六     
                            7     赵七     
                            8     赵八     

1、case的用法将代码用中文表示。

select id, name,
    (
        CASE sex when 1 then '男'
                 when 2 then '女'
                 else '未知'
        end
    ) sex
 from test

                            id    name    sex
                    ------------------------------
                            1     赵一     男
                            2     赵二     男
                            3     赵三     女
                            4     赵四     女
                            5     赵五     女
                            6     赵六     未知
                            7     赵七     未知
                            8     赵八     未知

2、关于查出字段为null的处理:
PS:如果数据库没有该条数据,case判断语句无效,如果数据库有该条数据case判断语句有效。

(1)、数据库有id=8这条数据,且sex这个字段为空。
---------
SQL> select id, name,
    (
        CASE  when sex is null then '未知'
                when sex=1 then '男'
                when sex=2 then '女'                  
        end
    ) sex
    from test
    WHERE id=8

                            id    name    sex
                    ------------------------------
                            8     赵八     未知

---------结果表明数据库有该条数据,进入为空判断转化。
(2)、数据库没有id=10这条数据。
SQL>select id, name,
    (
        CASE  when sex is null then '未知'
                when sex=1 then '男'
                when sex=2 then '女'                  
        end
    ) sex
     from test
    WHERE id=10

                            id    name    sex
                    ------------------------------


---------结果表明数据库没有该条数据,不进入判断语句转化。

3、将case与sum结合使用,可以实现分段统计:

SQL>select 
        sum(CASE sex when  1 then 1 else 0 end) 男,
        sum(CASE sex when  2 then 1 else 0 end) 女,
        sum(CASE  when sex is null then 1 else 0 end) 未知
    from test

                            男    女    未知
                    ------------------------------
                            2     3     3

---------当然这统计不仅仅是一个字段的,不相关联字段也可以一起统计,再没考虑运行速度上,目前我经常使用这中方法,以后学了查询速度快的方法在换。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值