IFNULL((SELECT (-1* sum (aa.hsl)) from saphanadb.acdoca aa where aa.kunnr=kv.kunnr and aa.RCLNT=800 and aa.RBUKRS=kv.vkorg and left (aa.racct, 4) in ('1122') and aa.XREVERSING='' and FKART='' and XREVERSED='' and DRCRK='H' and BLART !='ZV' and to_char(aa.budat, 'YYYYMM') =to_char(current_Date, 'YYYYMM') ), 0) "本月已收货款", IFNULL((SELECT SUM(case when bd.shkzg='S' then DMBTR when bd.shkzg='H' then -1*DMBTR else 0 end) FROM SAPHANADB.BSID BD WHERE BD.MANDT=800 AND BD.KUNNR=KV.KUNNR AND BD.BUKRS=KV.VKORG and bd.zfbdt<>'20220230' AND TO_DATE(BD.BUDAT, 'YYYYMMDD')<=last_Day(current_Date) group by bd.kunnr, bd.bukrs), 0) "本月底到期应收合计",
直接上代码解析
假设条件主表是主客户数据集。有着全表数据,此时子查询通过查询,where后面语句匹配主表。
我们会发现。aa.kunnr=kv.kunnr,即左边的数据会等于出左表原来没有的结果,因为左表的kunnr的数量一定是小于右表的,这样查询出来,会出现空值,这是这种情况出现空值,一般在计算求和时为了处理空值,我们可以用ifnull来判别是否为空值,如果为空值,则为第二个值。不为空。则为第一个值,这里的空值被赋值为0,注意,分组有时候也出现空值,处理方式类似。