你是不是想在下面做这样的事情
with sample as
(
select date ('2021-01-01') as tangal,'Code 1' as code1 ,'Code a' as code2, 100 as data union all
select date ('2021-01-01') as tangal,'Code 1' as code1 ,'Code b' as code2, 101 as data union all
select date ('2021-01-01') as tangal,'Code 1' as code1 ,'Code c' as code2, 102 as data union all
select date ('2021-01-01') as tangal,'Code 1' as code1 ,'Code d' as code2, 103 as data union all
select date ('2021-01-01') as tangal,'Code 2' as code1 ,'Code a' as code2, 198 as data union all
select date ('2021-01-01') as tangal,'Code 2' as code1 ,'Code b' as code2, 10 as data union all
select date ('2021-01-01') as tangal,'Code 2' as code1 ,'Code c' as code2, 101 as data union all
select date ('2021-01-02') as tangal,'Code 1' as code1 ,'Code a' as code2, 102 as data union all
select date ('2021-01-02') as tangal,'Code 1' as code1 ,'Code b' as code2, 109 as data union all
select date ('2021-01-02') as tangal,'Code 1' as code1 ,'Code d' as code2, 108 as data union all
select date ('2021-01-02') as tangal,'Code 2' as code1 ,'Code a' as code2, 105 as data union all
select date ('2021-01-02') as tangal,'Code 2' as code1 ,'Code a' as code2, 10 as data
)
,lkp_data as
(
select distinct sample.tangal ,sample.code1 ,code
from sample, (
select 'Code a' as code UNION all
select 'Code b' as code UNION all
select 'Code c' as code UNION all
select 'Code d' as code
)
)
select ld.*,
if(sp.data is null,0,sp.data) as data ,
sum(if(sp.data is null,0,sp.data))over(partition by ld.tangal,ld.code1 order by ld.code) cum_sum
from lkp_data ld
left join sample sp on
ld.tangal = sp.tangal and ld.code1 = sp.code1 and ld.code = sp.code2
输出