基于dual 有意思的decode和case-when-then-else-end的测试

本文介绍了一个使用Oracle SQL中的DECODE函数的具体示例。该示例展示了如何根据不同的输入值返回预定义的字符串,同时结合了CASE表达式来改变输入参数。此方法常用于业务逻辑处理中,以实现条件判断并返回相应的文本信息。

select  decode( op
                ,'a','hht,I am A; b is the base! and It is not a lie , '
                     ||'please believe me;I promise!'
                ,'b','hht,I am B; a is the base! and It is not a lie , '
                     ||'please believe me;I promise!'
                ,'c','I am not allow to tell you anything, sorry-ing......'
                ,'none') dcde
from (
     select case in_op
            when 'a' then 'b'
            when 'b' then 'a'
            else 'c'
            end op
             from (
                  select 'a' in_op
                  from dual
                  )
     )

SELECT productname, CASE WHEN productname='TOTAL' THEN Sum(pre_split_iui)OVER() ELSE pre_split_iui END pre_split_iui, CASE WHEN productname='TOTAL' THEN Sum(pre_split_mes)OVER() ELSE pre_split_mes END pre_split_mes, CASE WHEN productname='TOTAL' THEN Sum(split_iui)OVER() ELSE split_iui END split_iui, CASE WHEN productname='TOTAL' THEN Sum(split_mes)OVER() ELSE split_mes END split_mes, CASE WHEN productname='TOTAL' THEN Sum(wait_recycle_iui)OVER() ELSE wait_recycle_iui END wait_recycle_iui, CASE WHEN productname='TOTAL' THEN Sum(wait_recycle_mes)OVER() ELSE wait_recycle_mes END wait_recycle_mes, CASE WHEN productname='TOTAL' THEN Sum(in_recycle_iui)OVER() ELSE in_recycle_iui END in_recycle_iui, CASE WHEN productname='TOTAL' THEN Sum(in_recycle_mes)OVER() ELSE in_recycle_mes END in_recycle_mes, CASE WHEN productname='TOTAL' THEN Round(AVG(usetimes)OVER(),1) ELSE usetimes END usetimes, CASE WHEN productname='TOTAL' THEN Sum(last_usage_iui)OVER() ELSE last_usage_iui END last_usage_iui, CASE WHEN productname='TOTAL' THEN Sum(last_usage_mes)OVER() ELSE last_usage_mes END last_usage_mes, CASE WHEN productname='TOTAL' THEN Sum(today_usage_iui)OVER() ELSE today_usage_iui END today_usage_iui, CASE WHEN productname='TOTAL' THEN Sum(today_usage_mes)OVER() ELSE today_usage_mes END today_usage_mes, CASE WHEN productname='TOTAL' THEN Sum(last_rec_wo_iui)OVER() ELSE last_rec_wo_iui END last_rec_wo_iui, CASE WHEN productname='TOTAL' THEN Sum(last_rec_wo_mes)OVER() ELSE last_rec_wo_mes END last_rec_wo_mes, CASE WHEN productname='TOTAL' THEN Sum(today_rec_wo_iui)OVER() ELSE today_rec_wo_iui END today_rec_wo_iui, CASE WHEN productname='TOTAL' THEN Sum(today_rec_wo_mes)OVER() ELSE today_rec_wo_mes END today_rec_wo_mes FROM( SELECT 2 SEQ,AA.*,Nvl(BB.usetimes,1) usetimes,Nvl(BB.LAST_USAGE_IUI,0) LAST_USAGE_IUI,Nvl(BB.LAST_USAGE_MES,0) LAST_USAGE_MES,Nvl(BB.TODAY_USAGE_IUI,0) TODAY_USAGE_IUI,Nvl(BB.TODAY_USAGE_MES,0) TODAY_USAGE_MES,Nvl(CC.LAST_REC_WO_IUI,0) LAST_REC_WO_IUI,Nvl(CC.LAST_REC_WO_MES,0) LAST_REC_WO_MES,Nvl(CC.TODAY_REC_WO_IUI,0) TODAY_REC_WO_IUI,Nvl(CC.TODAY_REC_WO_MES,0) TODAY_REC_WO_MES FROM( SELECT productname, Sum(Decode(SOURCE,'IUI',PRE_SPLIT,0)) PRE_SPLIT_IUI, Sum(Decode(SOURCE,'MES',PRE_SPLIT,0)) PRE_SPLIT_MES, Sum(Decode(SOURCE,'IUI',SPLIT,0)) SPLIT_IUI, Sum(Decode(SOURCE,'MES',SPLIT,0)) SPLIT_MES, Sum(Decode(SOURCE,'IUI',WAIT_RECYCLE,0)) WAIT_RECYCLE_IUI, Sum(Decode(SOURCE,'MES',WAIT_RECYCLE,0)) WAIT_RECYCLE_MES, Sum(Decode(SOURCE,'IUI',IN_RECYCLE,0)) IN_RECYCLE_IUI, Sum(Decode(SOURCE,'MES',IN_RECYCLE,0)) IN_RECYCLE_MES FROM( SELECT SOURCE,productname, Sum(Decode(stage_flag,'PRE_SPLIT',qty,0)) PRE_SPLIT, Sum(Decode(stage_flag,'SPLIT',qty,0)) SPLIT, Sum(CASE WHEN stage_flag='RECYCLE' AND Upper(adstatus)='WAITING' THEN QTY ELSE 0 END) WAIT_RECYCLE, Sum(CASE WHEN stage_flag='RECYCLE' AND Upper(adstatus)='RUNNING' THEN QTY ELSE 0 END) IN_RECYCLE FROM( SELECT SOURCE,productname,adstatus,Sum(componentqty) qty,Round(Avg(queuetime),4) QT,Round(Avg(holdtime),4),STAGE_FLAG FROM( SELECT * FROM( SELECT 'MES' SOURCE,foupid,lotid,componentqty,status,adstatus,rulename,priority,queuetime,holdtime,stage,resourcetype,recipe,technology,productname,lottype, CASE WHEN SubStr(plocation,1,3)='MCS' THEN 'INSTOCKER' ELSE 'INFAB' END physicalstatus,plocation,lotowner,lotcomment, CASE WHEN resourcetype IN ('ED_CWR_OXE','ED_CWR_MET','GE_WET_PRM','2C_WR') THEN 'RECYCLE' ELSE CASE WHEN (InStr(UPPER(stage),'SPLIT')>0 OR InStr(UPPER(stage),'DUMMY')>0) AND InStr(Upper(rulename),'TRACKOUT')=0 AND InStr(Upper(rulename),'MERGE')=0 AND InStr(Upper(rulename),'SETUP')>0 THEN 'SPLIT' WHEN InStr(UPPER(stage),'PRE')>0 AND (InStr(UPPER(stage),'PROC')>0 OR InStr(UPPER(stage),'CLEAN')>0 OR InStr(UPPER(stage),'CLN')>0 ) THEN 'PRE_SPLIT' ELSE '' END END STAGE_FLAG FROM sdb_tb_info_cwwip WHERE SubStr(lotid,1,1)='E' AND priority=4 --AND productname='DFDRNHOX' --AND STAGE='RECYCLE' --ORDER BY LOTID UNION ALL SELECT 'IUI' SOURCE,foupid,lotid,componentqty,status,adstatus,rulename,priority,queuetime,holdtime,stage,resourcetype,recipe,technology,productname,lottype, CASE WHEN SubStr(plocation,1,2) IN ('ES','EB','GS','GB','2S','FS','FB','US','UB') THEN 'INSTOCKER' ELSE 'INFAB' END physicalstatus,plocation,lotowner,lotcomment, CASE WHEN resourcetype IN ('ED_CWR_OXE','ED_CWR_MET','GE_WET_PRM','2C_WR') THEN 'RECYCLE' ELSE CASE WHEN (InStr(UPPER(stage),'SPLIT')>0 OR InStr(UPPER(stage),'DUMMY')>0) AND InStr(Upper(rulename),'JOBOUT')=0 AND InStr(Upper(rulename),'INUSEEND')=0 AND InStr(Upper(rulename),'JOBPREP')>00 THEN 'SPLIT' WHEN InStr(UPPER(stage),'PRE')>0 AND (InStr(UPPER(stage),'PROC')>0 OR InStr(UPPER(stage),'CLEAN')>0 OR InStr(UPPER(stage),'CLN')>0 ) THEN 'PRE_SPLIT' ELSE '' END END STAGE_FLAG FROM dw01.sdb_tb_info_cwwip_p1@b2mfgdbp1 WHERE SubStr(lotid,1,1)='E' AND priority=4 ) WHERE STAGE_FLAG IS NOT NULL ) GROUP BY SOURCE,productname,adstatus,stage_flag ) GROUP BY SOURCE,productname ) GROUP BY productname )AA, ( SELECT productid,usetimes, Round(LAST_USAGE_IUI/Nvl(usetimes,1)) LAST_USAGE_IUI, Round(LAST_USAGE_MES/Nvl(usetimes,1)) LAST_USAGE_MES, Round(TODAY_USAGE_IUI/Nvl(usetimes,1)) TODAY_USAGE_IUI, Round(TODAY_USAGE_MES/Nvl(usetimes,1)) TODAY_USAGE_MES FROM( SELECT productid, Sum(CASE WHEN source='IUI' AND To_Char(SYSDATE-7.5/24,'YYYYMMDD')>HISTDATE THEN trackoutqty ELSE 0 END) LAST_USAGE_IUI, Sum(CASE WHEN source='MES' AND To_Char(SYSDATE-7.5/24,'YYYYMMDD')>HISTDATE THEN trackoutqty ELSE 0 END) LAST_USAGE_MES, Sum(CASE WHEN source='IUI' AND To_Char(SYSDATE-7.5/24,'YYYYMMDD')=HISTDATE THEN trackoutqty ELSE 0 END) TODAY_USAGE_IUI, Sum(CASE WHEN source='MES' AND To_Char(SYSDATE-7.5/24,'YYYYMMDD')=HISTDATE THEN trackoutqty ELSE 0 END) TODAY_USAGE_MES --Sum(Decode(source,'IUI',trackoutqty,0)) LAST_USAGE_IUI, --Sum(Decode(source,'MES',trackoutqty,0)) LAST_USAGE_MES, FROM( SELECT 'MES' source,productid,trackoutqty,To_Char(To_Date(SubStr(trackouttime,1,15),'YYYYMMDD HH24MISS')-7.5/24,'YYYYMMDD') HISTDATE FROM sdb_tb_wip_tito_hist WHERE SubStr(LOTID,1,1)='E' AND trackouttime>=To_Char(SYSDATE-7.5/24-1,'YYYYMMDD')||' 0730' --AND trackouttime<To_Char(SYSDATE-7.5/24,'YYYYMMDD')||' 0730' AND lottype IN ('C','D','Z','V','Y') AND priority=4 AND prim_resource NOT LIKE '%DUMMY%' AND equipmentname NOT LIKE '%DMY%' AND runtime>0 AND stage NOT IN('DUMMY','PRE_MEAS','POSTMEAS','POST_MEAS','PRE_PROC','RECYCLE','PRE_PROCESS') UNION ALL SELECT 'IUI' source,productid,trackoutqty,To_Char(To_Date(SubStr(trackouttime,1,15),'YYYYMMDD HH24MISS')-7.5/24,'YYYYMMDD') HISTDATE FROM dw01.sdb_tb_wip_tito_hist_p1@b2mfgdbp1 WHERE SubStr(LOTID,1,1)='E' AND trackouttime>=To_Char(SYSDATE-7.5/24-1,'YYYYMMDD')||' 0730' --AND trackouttime<To_Char(SYSDATE-7.5/24,'YYYYMMDD')||' 0730' AND lottype IN ('C','D','Z','V','Y') AND priority=4 AND prim_resource NOT LIKE '%DUMMY%' AND equipmentname NOT LIKE '%DMY%' AND runtime>0 AND stage NOT IN('DUMMY','PRE_MEAS','POSTMEAS','POST_MEAS','PRE_PROC','RECYCLE','PRE_PROCESS') ) GROUP BY productid )A, ( SELECT UNIQUE prodid,CASE WHEN use_times_per_recycle=0 THEN 1 ELSE use_times_per_recycle END usetimes FROM sdb_tb_cdw_prod )B WHERE A.productid=B.prodid(+) )BB, ( SELECT productid, Sum(CASE WHEN source='IUI' AND To_Char(SYSDATE-7.5/24,'YYYYMMDD')>HISTDATE THEN trackoutqty ELSE 0 END) LAST_REC_WO_IUI, Sum(CASE WHEN source='MES' AND To_Char(SYSDATE-7.5/24,'YYYYMMDD')>HISTDATE THEN trackoutqty ELSE 0 END) LAST_REC_WO_MES, Sum(CASE WHEN source='IUI' AND To_Char(SYSDATE-7.5/24,'YYYYMMDD')=HISTDATE THEN trackoutqty ELSE 0 END) TODAY_REC_WO_IUI, Sum(CASE WHEN source='MES' AND To_Char(SYSDATE-7.5/24,'YYYYMMDD')=HISTDATE THEN trackoutqty ELSE 0 END) TODAY_REC_WO_MES --Sum(Decode(source,'IUI',trackoutqty,0)) LAST_REC_WO_IUI, --Sum(Decode(source,'MES',trackoutqty,0)) LAST_REC_WO_MES FROM( SELECT 'MES' source,productid,trackoutqty,To_Char(To_Date(SubStr(trackouttime,1,15),'YYYYMMDD HH24MISS')-7.5/24,'YYYYMMDD') HISTDATE FROM sdb_tb_wip_tito_hist WHERE SubStr(lotid,1,1)='E' AND trackouttime>=To_Char(SYSDATE-7.5/24-1,'YYYYMMDD')||' 0730' --AND trackouttime<To_Char(SYSDATE-7.5/24,'YYYYMMDD')||' 0730' AND equipmentname IN ('2WROX01','FWROX01','EWOXR02','2WRPL01','2WRMT01','2CWRH01') --AND trackoutstageflag='T' UNION ALL SELECT 'IUI' source,productid,trackoutqty,To_Char(To_Date(SubStr(trackouttime,1,15),'YYYYMMDD HH24MISS')-7.5/24,'YYYYMMDD') HISTDATE FROM dw01.sdb_tb_wip_tito_hist_p1@b2mfgdbp1 WHERE SubStr(lotid,1,1)='E' AND trackouttime>=To_Char(SYSDATE-7.5/24-1,'YYYYMMDD')||' 0730' --AND trackouttime<To_Char(SYSDATE-7.5/24,'YYYYMMDD')||' 0730' AND equipmentname IN ('2WROX01','FWROX01','EWOXR02','2WRPL01','2WRMT01','2CWRH01') --AND trackoutstageflag='T' ) GROUP BY productid )CC WHERE AA.productname=BB.productid(+) AND AA.productname=CC.productid(+) --ORDER BY (last_usage_iui+last_usage_mes) DESC UNION ALL SELECT 1 SEQ,'TOTAL' productname,0 pre_split_iui,0 pre_split_mes,0 split_iui,0 split_mes,0 wait_recycle_iui,0 wait_recycle_mes,0 in_recycle_iui,0 in_recycle_mes,0 usetimes,0 last_usage_iui,0 last_usage_mes,0 today_usage_iui,0 today_usage_mes,0 last_rec_wo_iui,0 last_rec_wo_mes,0 today_rec_wo_iui,0 today_rec_wo_mes FROM DUAL ) ORDER BY SEQ,(last_usage_iui+last_usage_mes) DESC 上面select的那些字段都啥意思,怎么得到的
最新发布
12-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值