아래와 같은 계층 테이블이 있습니다.
with recur as
(
select 1 id , null amt , null p_id from dual union all
select 2 id , 303 amt , 1 p_id from dual union all
select 3 id , 188 amt , 1 p_id from dual union all
select 4 id , null amt , null p_id from dual union all
select 5 id , null amt , 4 p_id from dual union all
select 6 id , 412 amt , 5 p_id from dual union all
select 7 id , 678 amt , 5 p_id from dual union all
select 8 id , 583 amt , null p_id from dual
)
select
a.id
, a.amt
, a.p_id
from recur a
connect by
prior a.id = a.p_id
start with a.p_id is null
order siblings by
a.id
==>
ID AMT P_ID
1
2 303 1
3 188 1
4
5 4
6 412 5
7 678 5
8 583
상위로 집계하여
ID AMT P_ID AMTSUM
1 491
2 303 1 303
3 188 1 188
4 1090
5 4 1090
6 412 5 412
7 678 5 678
8 583 583
이런 결과를 얻고 싶습니다.
그런데 문제는 데이타가 엄청 많고(1000만 건 중에서 대략 2~3만 건을 select 하여 집계)
집계할 컬럼이 amt1,amt2,amt3.... 이런 식으로 많습니다.
가장 효과적인 방법이 어떤 것이 있을까요?
|