在SQL的查询条件中使用case when取数据

在SQL的查询条件中使用case when取数据

堪称SQL里的ifelse用法

第一步的id是业务信息的id,除第一步外,步骤id最大的表示当前步骤,每次取当前步骤id存入意见表中,:pid表示业务信息id参数例如:

select ID, --唯一标识(与步骤id一致)
       PID, --父id
       FBR --发表人
  from YKSPYJB --审批意见表
 where id = case
         when (select count(1)
                 from r_step a
                where a.process_id = :PID) > 1 then
          (select max(a.id)
             from sys_workflow_r_step a
            where a.process_id = :PID
              and a.id <> :PID)

         else
          (select max(id)
             from r_step a
            where a.process_id = :PID
           --and a.id <> :PID
           )
       end

应用场景:合计语句在查询条数大于6时统计出合计,否则不统计合计数据

这种情况,可以先用union把明细和合计都查出,然后用一个标识区别明细和合计,再类似上面的case when语句条件筛选

select *
  from (select ID px, 
               XMMC, 
               YKDW, 
               to_char(XMZTZ) XMZTZ, 
               BNJH, 
               to_char(YBK) YBK, 
               BYBK, 
               LJBK, 
               PFWH, 
               BZ, 
               1 hj --是否合计
          from YKJHXMMXB --项目明细表
         where PID = :pid
        union
        select 99999999999999 px, 
               '合计' XMMC, 
               '' YKDW, 
               '' XMZTZ, 
               sum(BNJH) BNJH, 
               '' YBK, 
               sum(BYBK) BYBK, 
               sum(LJBK) LJBK, 
               '' PFWH, 
               '' BZ, 
               2 hj --是否合计
          from YKJHXMMXB --项目明细表
         where PID = :pid
         order by px) t
 where t.hj < case
         when (select count(1) from YKJHXMMXB where pid = :pid) > 6 then
          3
         else
          2
       end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值