계층쿼리에서 최상위목록만 뽑으면서 하위 건수 파악하는 법이 뭘까요... 0 3 11,154

by 물개 CONNECT_BY_ROOT CONNECT BY PRIOR [2012.04.03 13:24:01]


1. 현재 최상위는 상위코드는 '*'로 설정되어 있으며, 기본코드를 '기본키'로 가집니다.
SELECT 
    기본코드
FROM 테이블명
where 상위코드 = '*' 
2. 아래 처럼 검색시 '0001'하위에 해당되는 모든 리스트를 볼 수 있습니다.SELECT 
    level as levelnm,
    A.기본코드
    A.상위코드
FROM 테이블명 A
START WITH A.상위코드 = '0001'
CONNECT BY PRIOR A.기본코드 = A.상위코드
ORDER SIBLINGS BY A.정렬번호, A.부서번호

1.번처럼 검색하면 최상위 목록만 20여개 만들어지는데요
그 옆에 '건 수'라는 컬럼으로 
기본코드가 '0001'(최상위임)이란 항목 옆에 130개 이렇게 보여주고 싶습니다.
추가로 '0132'(최상위임) 항목 옆은 50
이런식으로
보여주고 싶은데 어찌 검색해야 할지.....
도움을 구합니다.....
by 비니부장 [2012.04.03 13:58:21]
하위 레벨 건수를 구하는 함수가 있는지는 잘 모르겠습니다만...
단순하게는

A.상위코드 다음에

(select count(*) from 테이블명 B start with B.상위코드 = A.기본코드 CONNECT BY PRIOR B.기본코드 = B.상위코드) AS 건수

를 추가해주시면 됩니다.

by 마농 [2012.04.03 14:02:56]
SELECT 최상위코드
     , COUNT(*) AS "건 수"
 FROM (SELECT CONNECT_BY_ROOT 기본코드 AS 최상위코드
          FROM 테이블명
         START WITH 상위코드 = '*'
         CONNECT BY PRIOR 기본코드 = 상위코드
        )
 GROUP BY 최상위코드
;
SELECT 기본코드
     , (SELECT COUNT(*)
          FROM 테이블명
         START WITH 기본코드 = a.기본코드
         CONNECT BY PRIOR 기본코드 = 상위코드
        ) AS "건 수"
 FROM 테이블명 a
 WHERE 상위코드 = '*'
;

by 물개 [2012.04.03 14:17:54]
헐 이렇게 간단하게 해결하시다니...........

절 제자로 받아 주십시오 (__)

고맙습니다 ㅎㅎㅎㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입