COALESCE(c1, c2, ...,cn)

本文介绍了COALESCE函数的功能及用法,该函数用于返回列表中第一个非空的表达式,若所有表达式都为空则返回空值。文章通过示例展示了如何在不同场景下使用COALESCE函数替代CASE语句。
COALESCE(c1, c2, ...,cn)
【功能】返回列表中第一个非空的表达式,如果所有表达式都为空值则返回1个空值
【参数】c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null
【返回】同参数类型
【说明】从Oracle 9i版开始,COALESCE函数在很多情况下就成为替代CASE语句的一条捷径
【示例】
select COALESCE(null,3*5,44) hz from dual; 返回15
select COALESCE(0,3*5,44) hz from dual; 返回0
select COALESCE(null,'','AAA') hz from dual; 返回AAA
select COALESCE('','AAA') hz from dual; 返回AAA
WITH temp as( SELECT ASSY.CONTAINERID FROM CAMSTARADMIN.container ASSY WHERE ASSY.CONTAINERNAME ='25TF1179001006C' UNION all SELECT chdlot.CONTAINERID FROM CAMSTARADMIN.container ASSY inner JOIN CAMSTARADMIN.container CHDLOT ON CHDLOT.PARENTCONTAINERID =ASSY.containerid WHERE ASSY.CONTAINERNAME ='25TF1179001006C' UNION SELECT c1.CONTAINERID FROM CAMSTARADMIN.container c INNER JOIN CAMSTARADMIN.CONTAINER c1 ON c.ptcombinedlotname = c1.containername --测试批 WHERE c.CONTAINERNAME ='25TF1179001006C' UNION ALL SELECT c2.CONTAINERID FROM CAMSTARADMIN.container c INNER JOIN CAMSTARADMIN.CONTAINER c1 ON c.ptcombinedlotname = c1.containername --测试批 INNER JOIN CAMSTARADMIN.CONTAINER c2 ON c1.CONTAINERID = c2.SPLITFROMID --子批1 WHERE c.CONTAINERNAME ='25TF1179001006C' UNION ALL SELECT c3.CONTAINERID FROM CAMSTARADMIN.container c INNER JOIN CAMSTARADMIN.CONTAINER c1 ON c.ptcombinedlotname = c1.containername --测试批 INNER JOIN CAMSTARADMIN.CONTAINER c2 ON c1.CONTAINERID = c2.SPLITFROMID --子批1 INNER JOIN CAMSTARADMIN.CONTAINER c3 ON c3.SPLITFROMID = c2.CONTAINERID --子批2 WHERE c.CONTAINERNAME ='25TF1179001006C' ) ,qty_data AS ( SELECT sum(h.MOVEINQTY) MOVEINQTY ,sum(m.QTY) qty ,m.FROMSPECNAME FROM temp INNER JOIN CAMSTARADMIN.historymainline h ON h.CONTAINERID = temp.CONTAINERID INNER JOIN CAMSTARADMIN.MOVEHISTORY m ON m.HISTORYMAINLINEID = h.HISTORYMAINLINEID WHERE h.cdoname IN ('MoveLot') GROUP BY m.FROMSPECNAME ) ,loss_data as( SELECT h.SPECNAME, LISTAGG(dmr.lossreasonname || dmr.totalqty || '颗', ',') WITHIN GROUP (ORDER BY dmr.lossreasonname) AS lossDesc FROM temp INNER JOIN CAMSTARADMIN.historymainline h ON h.CONTAINERID = temp.CONTAINERID JOIN CAMSTARADMIN.A_REJECTLOTHISTORY ar ON ar.HISTORYMAINLINEID = h.HISTORYMAINLINEID JOIN CAMSTARADMIN.A_REJECTLOTHISTORYDETAILS dmr ON dmr.REJECTLOTHISTORYID =ar.REJECTLOTHISTORYID WHERE h.cdoname ='RejectLot' AND NOT EXISTS ( SELECT 1 FROM CAMSTARADMIN.HistoryMainline HM inner JOIN CAMSTARADMIN.PTUNDOREJECTHISTORY rlh ON RLH.HISTORYMAINLINEID = hm.HISTORYMAINLINEID left JOIN CAMSTARADMIN.A_RejectLotHistoryDetails RLHD on RLH.RejectLotHistoryId = RLHD.RejectLotHistoryId WHERE rlh.RejectLotHistoryId = ar.RejectLotHistoryId AND RLHD.lossreasonid =dmr.lossreasonid ) GROUP BY h.SPECNAME ) ,lots as( SELECT c1.CONTAINERID,10 AS flag FROM CAMSTARADMIN.container c INNER JOIN CAMSTARADMIN.CONTAINER c1 ON c.ptcombinedlotname = c1.containername --测试批 WHERE c.CONTAINERNAME ='25TF1179001006C' UNION ALL SELECT c.CONTAINERID,0 flag FROM CAMSTARADMIN.container c WHERE c.CONTAINERNAME ='25TF1179001006C' ) ,workflow_data as( SELECT distinct w2.WORKFLOWID FROM lots t INNER JOIN CAMSTARADMIN.historymainline h ON h.CONTAINERID = t.CONTAINERID INNER JOIN CAMSTARADMIN.WORKFLOWSTEP w ON w.WORKFLOWSTEPID = h.WORKFLOWSTEPID INNER JOIN CAMSTARADMIN.WORKFLOW w2 ON w2.WORKFLOWID = w.WORKFLOWID ) ,seq AS ( SELECT w3.WORKFLOWSTEPNAME ,w3."SEQUENCE" AS seq1, workflow_data.WORKFLOWID FROM workflow_data INNER JOIN CAMSTARADMIN.WORKFLOWSTEP w3 ON w3.WORKFLOWID = workflow_data.WORKFLOWID ORDER BY w3."SEQUENCE" ASC ) , end_data as( SELECT q.FROMSPECNAME,q.qty ,l.lossdesc ,s.seq1,q.MOVEINQTY FROM qty_data q LEFT JOIN loss_data l ON l.specname = q.FROMSPECNAME LEFT JOIN seq s on s.WORKFLOWSTEPNAME=q.FROMSPECNAME where q.FROMSPECNAME not in ('待装芯片线边仓') ) ,end_data2 as( SELECT * FROM end_data UNION all SELECT CASE WHEN e.seq1 =1 THEN '封装合格率 yield' WHEN e.FROMSPECNAME!='成品包装' THEN '测试合格率 yield' ELSE '' END AS FROMSPECNAME ,LEAD(e.qty) OVER (ORDER BY e.seq1) AS qty ,'' AS lossdesc ,e.seq1+99 AS seq1 ,CASE WHEN e.MOVEINQTY='0' then e.qty ELSE e.MOVEINQTY END AS MOVEINQTY FROM end_data e WHERE e.fromspecname in('模块测试中转库','测试中转库','成品包装') OR e.seq1=1 ) SELECT * FROM end_data2 e WHERE e.fromspecname IS NOT null优化代码
11-04
<select id="getUserDataSummaryVo" resultType="org.dromara.system.domain.vo.UserDataSummaryVo"> SELECT DATE(#{bo.startTime}) AS start_time, DATE(#{bo.endTime}) AS end_time, SUM(COALESCE(recharge.total_recharge, 0)) AS total_recharge, SUM(COALESCE(withdraw.total_withdraw, 0)) AS total_withdraw, SUM(COALESCE(bet.bet, 0)) AS total_valid_bet, SUM(COALESCE(win.win, 0)) AS total_win, SUM(COALESCE(bet.bet - win.win, 0)) AS total_profit, SUM(COALESCE(recharge.total_recharge - withdraw.total_withdraw, 0)) AS total_recharge_diff, SUM(COALESCE(bet_count.bet_count, 0)) AS total_bet_count FROM sys_user su LEFT JOIN ( SELECT aro.user_id, aro.recharge_amount AS first_recharge_amount, aro.create_time AS first_recharge_time FROM app_recharge_order aro WHERE aro.status = 1 AND aro.create_time = ( SELECT MIN(create_time) FROM app_recharge_order WHERE user_id = aro.user_id AND status = 1 ) ) first_recharge ON su.user_id = first_recharge.user_id LEFT JOIN ( SELECT user_id, user_parent_id FROM app_user_info GROUP BY user_id ) user_info ON su.user_id = user_info.user_id LEFT JOIN ( SELECT user_id, SUM(recharge_amount) AS total_recharge FROM app_recharge_order WHERE status = 1 <if test="bo.startTime != null and bo.startTime != ''"> AND create_time >= #{bo.startTime} AND create_time <= #{bo.endTime} </if> GROUP BY user_id ) recharge ON su.user_id = recharge.user_id LEFT JOIN ( SELECT user_id, SUM(balance) AS total_withdraw FROM app_apply WHERE status = 1 <if test="bo.startTime != null and bo.startTime != ''"> AND create_time >= #{bo.startTime} AND create_time <= #{bo.endTime} </if> GROUP BY user_id ) withdraw ON su.user_id = withdraw.user_id LEFT JOIN ( SELECT user_id, SUM(number) AS bet FROM app_game_order WHERE status IN (1,2) <if test="bo.startTime != null and bo.startTime != ''"> AND create_time >= #{bo.startTime} AND create_time <= #{bo.endTime} </if> GROUP BY user_id ) bet ON su.user_id = bet.user_id LEFT JOIN ( SELECT user_id, SUM(end_number) AS win FROM app_game_order WHERE status = 1 <if test="bo.startTime != null and bo.startTime != ''"> AND create_time >= #{bo.startTime} AND create_time <= #{bo.endTime} </if> GROUP BY user_id ) win ON su.user_id = win.user_id LEFT JOIN ( SELECT user_id, COUNT(1) AS bet_count FROM app_game_order WHERE status IN (1,2) <if test="bo.startTime != null and bo.startTime != ''"> AND create_time >= #{bo.startTime} AND create_time <= #{bo.endTime} </if> GROUP BY user_id ) bet_count ON su.user_id = bet_count.user_id <where> <if test="bo.userId != null"> AND su.user_id = #{bo.userId} </if> <if test="bo.userParentId != null"> AND user_info.user_parent_id = #{bo.userParentId} </if> <if test="bo.channelId != null and bo.channelId != ''"> AND su.channel_source = #{bo.channelId} </if> <if test="bo.registerStartTime != null and bo.registerStartTime != ''"> AND su.create_time >= #{bo.registerStartTime} AND su.create_time < #{bo.registerEndTime} </if> <if test="bo.firstRechargeStartTime != null and bo.firstRechargeStartTime != ''"> AND first_recharge.first_recharge_time >= #{bo.firstRechargeStartTime} AND first_recharge.first_recharge_time <= #{bo.firstRechargeEndTime} </if> </where> </select> 这个sql 有没有问题 需要优化不
10-30
SELECT t.*, to_char(CAST(generate_series( CAST((CASE WHEN t.itemInternetDate >= '2025-09-29' THEN t.itemInternetDate ELSE '2025-09-29' END) AS timestamp), '2025-11-28', CAST('1 day' AS INTERVAL) ) AS timestamp), 'yyyy-MM-dd') AS date_column FROM ( SELECT t3.c0003_city_code areaCode, t3.c0003_city_name areaName, t2.c0002_enterprise_code entCode, t2.c0002_enterprise_name entName, t3.c0003_substation_id subId, t3.c0003_port_name subName, t8.c0001_item_code itemDialogCode, t8.c0008_item_desc itemName, to_char(COALESCE(t8.c0008_confirmnetdate, t8.c0008_create_time), 'yyyy-MM-dd') itemInternetDate FROM t0008_ai t8 INNER JOIN t0003_substation t3 ON t3.c0003_substation_id = t8.c0003_substation_id AND COALESCE(t3.c0003_substation_imdtype, '0') != '1' AND t3.c0003_del_flag = 1 AND t3.c0003_substation_id IN ( '05d80a4a35dd466c80fed0a96234fff9' , '918e0ef3569442aa8769efc6d625f7e9' , '1585a71883684bd98de0c440268e9354' , 'e9b259fe08d7467c80ab2fb347034404' , 'b50c33fb04b044879d4fd8c0cd117c8e' , '2dc09ba1ac06455e9206e31eb7904c0d' , '727e1be3ffc74ef698caaec2ab4f49bb' , '400e120e60d149648ae52152dfc65ce0' , '6b2e54fd30c042da822e7b7b6efe9202' , '5b8241bd6a114fcfbb927bd796c2466e' , 'fd856c688a7a4b249c2a2aacb07ed641' , '92db3fe55b35403a8a5ce6d4484d2b4d' , 'b19be3fdf2bf4c7788be5772a1a1071a' , 'bdbf3708baa4426294623c1b5711f59f' , 'a69805687f644656abf2d9909d5d85f7' , 'f03cb9445b64493fb1a9956e29357a6a' , 'f548dc2b3ffe4253bf58f0fb4de809cb' , 'b3b8aa38ebca4703a7696a2fb355fa22' , '19695' , '16255' , '19697' , '13595' , '21457' , '13936' , '21459' , '21455' , '13937' , '21456' , '13921' , '13917' , '13292' , '13938' , 'd8304faac7584783af114600cce0f719' , '0fee43746ef84c349d9f57f380871653' , '8a6b41bb89cd45498c4ace2f4bae3c56' , 'c31ee54168b24fb097f14958236b19fa' , 'beb55805ce2948c79b3143b8b962fbf1' , '3a9b80cd287249c6b95cd30036cc5ea3' , 'a08d1038a0b3486eb3dace4a4571cca8' , 'd39c0e27c46e42d19df9c5441bf0132c' , 'ff8a547808ec45ec92e0821c659c1b00' , '089b45a39d584827b6c2af46dc0a3012' , '339f9871b97747fbb75ce3f674821ac4' , '8ecc4c67e7fc979f09902ff5' , 'a72d684002db446e88a246f69d79f5b6' , 'a424dd2ec12a49d8b8a7ecea2e67e89c' , '840a5c3fa9db4528aeb58a98b73363fa' , '2f0bf582ebbc424eb41e2eb755dde46a' , 'cc4d751f1c404cbc8969151272a7a62f' , 'd42f71b6d4654ca6a74df6c6b503e374' , 'fe5805ad46604a8f978724c340827482' , '8a136ee0235547e7ad8589e677b05aef' , 'fdaaed0b838c45b9a47b6acca2657613' , 'bd5a4c6807a441b09953f978ec7c1c8c' , '226f68c0646d4ffd98e18e33ba660289' , '6373b117dc30443d9059a3ac98403138' , 'eb563299c7ea42aba7cb093211ce57a9' , '7e31b922759d4e798caa673ecb295d6c' , 'e20238602c564204ae7a406205ac483d' , 'e018ad90ad97403dba94fc779b4c5bea' , '13a86a1bbfe746ca9b3f67298e71373b' , 'e772eedd83444145879ba257f0953ecf' , '3cce9f937f6c4339a3b6722f230ec98c' , 'd883e76214674b4f83cc124953ddbf8a' , '1dc4edfe843e4ea59ad2b57b2dd6808a' , '40188945b7ff4245af98430569dcbec8' , '14e67f1036434e298d1aafcd11cc38b9' , 'e87e22659819413f87e49e1afa39899d' , 'a02aa5d57fc44fb3a3bae47c250b85fe' , 'b0b2cb5a9f2f41b8b590747d80d84ed2' , '3983364c2b7c40a2a521e2c88eee2c6e' , '3effb0d0d9ad420aae095a28676f396d' , 'e5d2d10682124c2ca86dfdeb2c7ff925' , '843d6db0e7144482b6fc5e534d1fa9e5' , '86ec359840be4a24a9a6fe00c93dbee6' , '82a3ace6f9e64f9ab6d7bea44a79dcf2' , '0b4997a39eec4858848abfcc3919f437' , '149e903b3c1c4c1b999e03832c8c7cfb' , '7cd28ae9e408461681002e29ac2c4651' , '8a0aa0c18256455c84a335bc6307b568' , '167a8ff6314f4ee0aaf340f9b0215058' , '47ac0b596f9543999288a26c2224fa96' , '1503e888caff4ea4b82fbda1d56d39d8' , '72b7bf4eefae4c0b8ae202f9013fa4ce' , 'dc753a5400594aef819d2b5f97f3e1bc' , 'd1020cae0eb041d6abfaa6a94456c60a' , '76299b9d1a914a80885b5f454097f013' ) AND t3.c0003_substation_type_new IN ('6') AND t3.c0003_city_code IN ( '全选' , '370100' , '370200' , '370300' , '370400' , '370500' , '370600' , '370700' , '370800' , '370900' , '371000' , '371100' , '371300' , '371400' , '371500' , '371600' , '371700' ) INNER JOIN t0002_enterprise t2 ON t3.c0002_enterprise_id = t2.c0002_enterprise_id WHERE COALESCE(t8.c0008_ifcheck, 0)= 0 AND t8.c0001_item_code IN ( '201' , '203' , '207' ) ) t修改为oracle
最新发布
11-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值