CASE WHEN THEN

 

SQL语句中SUM统计函数在统计次数的时候就不能用了,此时需要借助CASE WHEN THEN语句,这里做个笔记,以策查询。

Case具有两种格式。简单Case函数和Case搜索函数。
--简单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部分将会被自动忽略。
如今天遇到的对各个报警级别的次数的统计,因为各个级别均为数字,不能直接用sum函数,这时case就能派上用处了。

 select sum(case trs_rest when '0' then 1 end) ALM0 from alm_inf

select sum(case trs_rest when '0' then 1 end) ALM1 from alm_inf.。。。

今天写了个惊天地,泣鬼神的SQL语句,好长啊。。。用的就是case when

SELECT noo,LVL0,LVL1,LVL2,LVL3,LVL4,LVLSUM,ALM40,ALM41,ALM42,ALM43,ALM44,ALMSUM4,
ALM30,ALM31,ALM32,ALM33,ALM34,ALMSUM3,ALM20,ALM21,ALM22,ALM23,ALM24,ALMSUM2 FROM
( SELECT noo, sum(case alm_lvl when 0 then 1 end) LVL0, sum(case alm_lvl when 1 then 1 end)
 LVL1, sum(case alm_lvl when 2 then 1 end) LVL2, sum(case alm_lvl when 3 then 1 end) LVL3,
 sum(case alm_lvl when 4 then 1 end) LVL4, sum(1) LVLSUM from
 ( select sys_brch_no as noo,alm_lvl,SYS_BRCH_NO 
 from alm_inf a,alm_rule b where a.rule_id=b.rule_id 
 ) group by noo)LVL,(
  select soo,
   sum(case when trs_rest=0 and alm_lvl=4 then 1 end) ALM40,
   sum(case when trs_rest=1 and alm_lvl=4  then 1 end) ALM41,
   sum(case when trs_rest=2 and alm_lvl=4 then 1 end) ALM42,
   sum(case when trs_rest=3 and alm_lvl=4 then 1 end) ALM43,
   sum(case when trs_rest=4 and alm_lvl=4 then 1 end) ALM44,
   sum(case when alm_lvl=4 then 1 end ) ALMSUM4,
   sum(case when trs_rest=0 and alm_lvl=3 then 1 end) ALM30,
   sum(case when trs_rest=1 and alm_lvl=3  then 1 end) ALM31,
   sum(case when trs_rest=2 and alm_lvl=3 then 1 end) ALM32,
   sum(case when trs_rest=3 and alm_lvl=3 then 1 end) ALM33,
   sum(case when trs_rest=4 and alm_lvl=3 then 1 end) ALM34,
   sum(case when alm_lvl=3 then 1 end ) ALMSUM3,
   sum(case when trs_rest=0 and alm_lvl<3 then 1 end) ALM20,
   sum(case when trs_rest=1 and alm_lvl<3  then 1 end) ALM21,
   sum(case when trs_rest=2 and alm_lvl<3 then 1 end) ALM22,
   sum(case when trs_rest=3 and alm_lvl<3 then 1 end) ALM23,
   sum(case when trs_rest=4 and alm_lvl<3 then 1 end) ALM24,
   sum(case when alm_lvl<3 then 1 end ) ALMSUM2
    from ( select sys_brch_no as soo,trs_flag,trs_rest,alm_lvl from alm_inf a,alm_rule b where a.rule_id=b.rule_id   )
    where trs_flag='1' group by soo ) ALM WHERE LVL.noo=ALM.soo

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值