Oracle右连接后加法返回空值,需保留右表基础值求助
解决右连接后加法返回空值的问题
问题出在右连接后,当左表子查询x中没有对应compte的记录时,x.mnt会是NULL,而数值与NULL相加的结果仍为NULL,导致丢失右表t的posdev基础值。
只需用COALESCE()函数将x.mnt的NULL值替换为0,即可保证加法运算正常保留右表的基础值,修改后的查询语句如下:
SELECT t.compte, t.posdev + COALESCE(x.mnt, 0) FROM ( SELECT compte,SUM(mntdev) as mnt FROM mvtc22 WHERE compte IN ('11510198451','00610198451','40010198451','40010198453','00610198461','00101980081','00101980094', '00101980111','40010198461','40010198462','40010198466','40010198463') AND datoper BETWEEN '01/01/22' AND '06/01/22' GROUP BY compte )x RIGHT OUTER JOIN ( SELECT c.compte,c.posdev FROM v_sldoper c WHERE c.compte IN ('11510198451','00610198451','40010198451','40010198453','00610198461','00101980081','00101980094', '00101980111','40010198461','40010198462','40010198466','40010198463') AND datpos = '31/12/21' )t ON t.compte = x.compte
COALESCE(x.mnt, 0)的作用是返回参数列表中第一个非NULL的值:当x.mnt存在时用它的实际值,不存在时则取0,这样加法运算就能得到posdev的基础值(相当于加0),而非空值。
内容的提问来源于stack exchange,提问作者Alexandre Barrère
相关产品推荐
相关产品推荐

