|
把这个sum用listagg拆开就看得很清楚了:
with tmp as
(select level as lv from dual connect by level <=20)
,
tmp1 as
(select -- /*+ materialize */
level as lv, trunc(dbms_random.value(1,10)) as val
from dual connect by level <=20)
select * from tmp a
outer apply
(select sum(val) as sum_v ,listagg(b.val,'+') within group(order by lv) as val
from tmp1 b
where a.lv>=b.lv
)t2;
|
|