계층형 쿼리 질문 0 2 484

by 띵똥 [2019.04.23 10:43:58]


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 조회됨

by 르매 [2019.04.23 15:59:26]

계층형은.. 가장 간단하게 하면 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;

 


by 마농 [2019.04.23 16:12:20]

질문이 모호합니다.
최상위 부서외엔 A,B,상위부서만 조회되어야합니다. --> 이게 무슨 말일까요?
150404 조회시 150403,150404,150400 조회됨 --> 이게 왜 이렇게 나와야 할까요?

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