안녕하세요. 계속 눈팅만 하다가 도움이 필요한 상태라서 글을 올려봅니다.
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
(이런 결과는 안됩니다. )
고수님들 도와주세요.
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 ;