在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