plsql不用if在过程里条件判断而是用case在SQL里完成条件语句
场景:有时要根据同一个字段的不同内容进行计算。
解决:1、如果在Excel里直接用IF函数层层嵌套就能轻松解决。
2、sql语言就用case来进行判断生成。
例句如下:
select a4.*,ceil(jybhl/jhl) jybhjs, ceil(jybhl/jhl)*jhl jybhsl from ( --ceil是数值向上取整
select a3.*,case --case语句
when jybhsl<=0 then 0 --当jybhsl<=0 时,结果为0
else jybhsl end jybhl --当jybhsl>0时,结果是jybhsl,end结束,别名jybhl
from (
select a2.*,case --case语句
when gyssx ='本地' then ((bhzq+3)*sqdms+kpce+qhl-sqztsl-mdkcsl-spkc) --当gyssx ='本地' 时,执行后面的计算公式
else ((bhzq+3)*(sqdms+wqdms)+kpce-wqztsl-mdkcsl-spkc) end jybhsl --当gyssx<>'本地' 时,执行后面的计算公式
from (
select a1.*,case --case用法
when kcpmc>=0 then 0
else -kcpmc end kpce from (
SELECT t.dm,t.gbbarcode,t.gbcname,w.dw,w.gysdm,w.gysmc,w.jhl,w.gyssx,w.bhzq, t.sl1,t.sl2,t.sl3,t.sl4,
t.mdkcsl,t.spkc,t.wsl1,t.wsl2,t.wsl3,t.wsl4,t.wmdkcsl,t.hmax,t.wmax,t.sqpml,t.sqztsl,t.wqztsl,t.qhmds,t.pmmds,
round((sl1+sl2+sl3+sl4-hmax)/21,2) sqdms,round((wsl1+wsl2+wsl3+wsl4-wmax)/12,2) wqdms,
round((sqpml/decode(pmmds,0,1,pmmds))*qhmds,2) qhl,(mdkcsl-sqpml) KCPMC
FROM YRYP_PSBH t,luckman@house w where rq=trunc(sysdate)
and t.dm=w.dm ) a1 ) a2) a3) a4

浙公网安备 33010602011771号