CONNECT BY 질문입니다. 0 2 2,571

by 꼬랑지 [SQL Query] [2013.02.26 16:20:24]


WITH T AS(
SELECT 'C1' SRC_CUST_NO,'C2'  TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C1' SRC_CUST_NO,'C3'  TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C1' SRC_CUST_NO,'C4'  TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C1' SRC_CUST_NO,'C6'  TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C2' SRC_CUST_NO,'C21' TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C2' SRC_CUST_NO,'C22' TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C22' SRC_CUST_NO,'C23' TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C5' SRC_CUST_NO,'C51' TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C5' SRC_CUST_NO,'C52' TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C5' SRC_CUST_NO,'C53' TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C6' SRC_CUST_NO,'C61' TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C7' SRC_CUST_NO,'C71' TRG_CUST_NO FROM DUAL UNION ALL
SELECT 'C6' SRC_CUST_NO,'C62' TRG_CUST_NO FROM DUAL
)

SELECT SRC_CUST_NO,TRG_CUST_NO,LEVEL,CONNECT_BY_ROOT SRC_CUST_NO ROOT,CONNECT_BY_ISLEAF
FROM T
CONNECT BY PRIOR TRG_CUST_NO = SRC_CUST_NO
ORDER BY CONNECT_BY_ROOT SRC_CUST_NO,SRC_CUST_NO,TRG_CUST_NO
;

계층구조로 출력한 데이타에서 ROOT가 동일한 데이타끼리 같은 그룹번호를 부여하려고 합니다.
그런데 C2 나 C6 그룹 같은 경우 이미 C1의 그룹에 출력되었기 때문에 다시 나타나서는 안됩니다.
어떻게 하면 될까요?
(한동안 SQL 에 손을 놓았더니 머리가 안돌아가네요 ㅠㅠ)

by 마농 [2013.02.26 16:32:40]
SELECT *
  FROM t a
 START WITH NOT EXISTS (SELECT 1 FROM t WHERE trg_cust_no = a.src_cust_no)
 CONNECT BY PRIOR trg_cust_no = src_cust_no
;

by 꼬랑지 [2013.02.26 17:56:48]

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