계층구조(조직도) - 특정 부서의 상하 계층부서 모두를 가져오려면?? 0 2 3,842

by 유상헌 [SQL Query] 계층구조 [2014.02.26 15:06:15]



안녕하세요. 계속 눈팅만 하다가 도움이 필요한 상태라서 글을 올려봅니다.

WITH BASE (DEPT_CD, HIGH_DEPT_CD) AS (
SELECT '1A' , ''    FROM DUAL UNION ALL
SELECT '2A' , '1A'  FROM DUAL UNION ALL
SELECT '3A' , '2A'  FROM DUAL UNION ALL
SELECT '4A' , '3A'  FROM DUAL UNION ALL
SELECT '5A' , '4A'  FROM DUAL UNION ALL
SELECT '3B' , '1A'  FROM DUAL UNION ALL
SELECT '4B' , '3B'  FROM DUAL UNION ALL
SELECT '5B' , '4B'  FROM DUAL
)
SELECT SYS_CONNECT_BY_PATH(DEPT_CD,'/') FULL_DEPT
, DEPT_CD
, HIGH_DEPT_CD
  FROM BASE
 START WITH HIGH_DEPT_CD IS NULL
CONNECT BY PRIOR DEPT_CD = HIGH_DEPT_CD

부서 조직도에서  특정 부서로 검색시 그 부서와 관련된 상하 계층 부서 모두를 가져오려고 합니다.

예) 3A로 검색시

원하는 출력 방식은 아래와 같습니다.

/1A
/1A/2A
/1A/2A/3A

UNION

/1A/2A/3A
/1A/2A/3A/4A
/1A/2A/3A/4A/5A


합쳐진 결과를 원합니다.

/1A
/1A/2A
/1A/2A/3A
/1A/2A/3A/4A
/1A/2A/3A/4A/5A

(레벨별 Path 가 필요합니다.)
--------------------------------------------

/1A/2A/3A
/1A/2A/3A/4A
/1A/2A/
3A/4A/5A

이 부분은 like로 가져왔는데...

/1A
/1A/2A
/1A/2A/3A

이 부분은 어떻게 해야할지 모르겠습니다.

/3A
/3A/2A
/3A/2A/1A

(이런 결과는 안됩니다. )

고수님들 도와주세요.

by 마농 [2014.02.26 16:24:53]
SELECT SYS_CONNECT_BY_PATH(dept_cd, '/') full_dept
     , dept_cd
     , high_dept_cd
  FROM (SELECT *
          FROM base
         START WITH dept_cd = '3A'
         CONNECT BY dept_cd = PRIOR high_dept_cd
         UNION ALL
        SELECT *
          FROM base
         START WITH high_dept_cd = '3A'
         CONNECT BY PRIOR dept_cd = high_dept_cd
        )
 START WITH high_dept_cd IS NULL
 CONNECT BY PRIOR dept_cd = high_dept_cd
;

by 유상헌 [2014.02.26 16:41:27]
알려주신 방법대로 문제를 잘 해결했습니다.

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