SELECT '150403' AS A, --부서코드
'A부서' AS B, --부서명
'150400' AS C --상위부서
FROM DUAL
UNION ALL
SELECT '150404' AS A, --부서코드
'B부서' AS B, --부서명
'150400' AS C --상위부서
FROM DUAL
UNION ALL
SELECT '150400' AS A, --부서코드
'상위부서' AS B, --부서명
'151000' AS C --상위부서
FROM DUAL
UNION ALL
SELECT '151000' AS A, --부서코드
'최상위부서' AS B, --부서명
'150400' AS C --상위부서
FROM DUAL;
계층형 쿼리를 잘 몰라서.. 질문 드립니다.
위와같은 부서 테이블이 존재합니다.
조회조건에 최상위부서로 조회시엔 하위부서가 다 나와야하고
최상위 부서외엔 A,B,상위부서만 조회되어야합니다.
EX> 151000 조회시 150403,150404,150400,151000 조회됨
150404 조회시 150403,150404,150400 조회됨
계층형은.. 가장 간단하게 하면 Recursive CTE 형태가 되겠죠?
WITH DEP AS ( SELECT '150403' AS dep_id, -- 부서코드 'A부서' AS dep_name, -- 부서명 '150400' AS parent_dep_id -- 상위부서 FROM DUAL UNION ALL SELECT '150404', 'B부서', '150400' FROM DUAL UNION ALL SELECT '150400', '상위부서', '151000' FROM DUAL UNION ALL SELECT '151000', '최상위부서', NULL FROM DUAL ), RECURSIVE C AS ( SELECT dep_id, dep_name, parent_dep_id, CAST(dep_id AS CHAR(200)) AS path FROM DEP WHERE parent_dep_id IS NULL UNION ALL SELECT D.dep_id, D.dep_name, D.parent_dep_id, CONCAT(C.path, ',', D.dep_id) FROM C INNER JOIN DEP D ON D.parent_dep_id = C.dep_id ) SELECT dep_id, dep_name, parent_dep_id, path FROM C ORDER BY path;