SELECTTL."年月",
(SELECT SUM (case when bd.shkzg='S' then DMBTR when bd.shkzg='H' then -1*DMBTR else 0 end)
from SAPHANADB.knvv kv
left join SAPHANADB.but000 bt
on bt.client=kv.mandt
and bt.partner=kv.kunnr
left join SAPHANADB.ukmbp_CMS_SGM us on us.partner=kv.kunnr
and kv.mandt=us.client
left join SAPHANADB.KNA1 ka
on ka.mandt=800 and ka.kunnr=kv.kunnr
left join SAPHANADB.BSID BD
ON BD.MANDT=KV.MANDT
AND BD.BUKRS=KV.VKORG
AND BD.KUNNR=KV.KUNNR
where kv.mandt=800
and ADD_DAYS(bd.zfbdt,bd.zbd1t+zbd2t+bd.zbd3t)<=last_Day(TL."年月")
and us.CREDIT_SGMNT=1000)
FROM
(select to_char(add_months(current_date, -1 * zlist), 'yyyymm') "年月"
from SAPHANADB.zlist
where add_months_last(current_date, -1 * zlist) >= '2021-04-01') TL
问题的处理情景:发现在你只有列数据列,并且列数据集通过多重嵌套子查询取出来的,这时候,你想找到,直到某月所发生的和是多少,并且要按照月去显示,只有构造数据集去显示。
首先观察主表为一个月份表,直接从最后看,表名为TL,这里的TL是一个由子查询所构成的表,一个子查询构成了我们的整体表,里面的结果,会构成一个从2021年4月1日到目前日期的时间序列。
二、select后面,跟着是二个取列的项,其中一个是子查询,第一个取的是时间,第二个取的是一个子查询,我们需要构建一个与主表时间有关的相关性子查询。
三、重点是对子查询做分解,子查询是个四表的中数据的数和,内部用case做了一个条件限制,做了一个标识不同,数据内部互相求和,数据来源一个链接的表之中,并且这里的时间,小于主表中的时间。这样一个时间序列就完成呢,内部的求和就是一个,按月份累加的求和。就是我们想要的数据,最后的部分是可以加限制条件的作为过滤的
四、最后的结果是得到一个按照月份排列,累计求和的数据列。