table은 다음과 같습니다. 현재 행은 자신의 고유코드와 자신의 속해 있는 상위코드를 가집니다. value는 트리 구조에서 가장 하단에 위치할 경우만 값을 가집니다.
create table test(name varchar(20),
code number, -- 고유코드번호
asc_code number, -- 상위코드번호
value number)
입력된 데이터는 다음과 같습니다.
CODE SUBSTR(NAM ASC_CODE VALUE
---------- ---------- ---------- ----------
1110 코카스 1100 2
1120 치오와 1100 4
1100 개과 1000
1210 페르시아 1200 1
1200 고양이과 1000
1311 이구아나 1310 5
1310 육상 1300
1300 파충류과 1000
1321 거북이 1320 6
1320 해양 1300
1000 애완동물
1312 도마뱀 1310 9
위의 데이터를 가지고 connect by를 사용하여 계층적인 구조로 표현했습니다.
select level,
substr(lpad(' ', 2*(level-1))||code, 1, 20),
substr(name, 1, 10),
substr(value, 1, 2)
from test_ji
start with name = '애완동물'
connect by prior code = asc_code
-----------------결과물----------------------
LEVEL CODE NAME VALUE
---------- -------------------- ---------- --
1 1000 애완동물
2 1100 개과
3 1110 코카스 2
3 1120 치오와 4
2 1200 고양이과
3 1210 페르시아 1
2 1300 파충류과
3 1310 육상
4 1311 이구아나 5
4 1312 도마뱀 9
3 1320 해양
4 1321 거북이 6
[문제]
현재 value 값은 최단의 말단 값들만 실제로 가지게 됩니다. 이것을 단 하나의 SQL문을 사용하여 하위 계정은 자신이 속한 상위계정에 합계값을 반영하게 하는 방법은 없을까요? 예를 들자면 '개과'에는 '코카스'와 '치와와'라는 하위 계정이 두 개가 있으므로 이들의 value인 2와 4를 더하여 6을 가지고 가장 상위 계정인 '애완동물'은 자신의 하위계정인 level=2의 value값을 가지게 말이지요.
분석함수를 좀 써서 하려고 해도 도무지 잘 되지가 않네요.;;