MSSQL 계층형 부서 와 사용자 트리 쿼리
프로젝트나 개발을 하다보면 부서 정보와 같은 계층형 정보를 트리로 보여줘야 하는 작업을 많이하게 됩니다. 이와 관련하여 아래의 글에서 알아보았었습니다.
[MSSQL 계층형(Hierarchy) 및 숫자를 한글로 변환]
지난 글에서 더 나아가 사용자도 같이 보여줘야 하는 경우는 어떻게 할까요?
하여 오늘은 MSSQL 계층형 부서 와 사용자 트리 쿼리에 대해서 알아보겠습니다.
아래의 쿼리를 참고하시면 쉽게 작업이 가능하실거에요...ㅎ
;WITH TREECTE(DEPTID, PDEPTID, DEPTNM, SORT, [Level], GUBUN)
AS
(
-- 최상위 부서
SELECT
DEPTID
, ISNULL(PDEPTID, 0) AS PDEPTID
, DEPTNM
, CONVERT(VARCHAR, DEPTID) AS SORT
, 1 AS [Level]
, 'D' AS GUBUN
FROM Tbl_DEPT
WHERE PDEPTID IS NULL
UNION ALL
-- 최상위 부서 밑의 하위 부서
SELECT
C.DEPTID
, ISNULL(C.PDEPTID, 0) AS PDEPTID
, C.DEPTNM
, CONVERT(VARCHAR, P.SORT + ':' + CONVERT(VARCHAR, C.DEPTID)) AS SORT
, P.[Level] + 1 AS [Level]
, 'D' AS GUBUN
FROM Tbl_DEPT AS C
INNER JOIN TREECTE AS P ON C.PDEPTID = P.DEPTID
UNION ALL
-- 각 부서에 매핑되있는 사용자
SELECT
CU.CUSRUID AS DEPTID
, ISNULL(C.PDEPTID, 0) AS PDEPTID
, CU.CUSRNAM AS DEPTNM
, CONVERT(VARCHAR, P.SORT + ':' + CONVERT(VARCHAR, C.DEPTID) + ':' + CU.CUSRUID) AS SORT
, P.[Level] + 2 AS [Level]
, 'C' AS GUBUN
FROM Tbl_DEPT AS C
INNER JOIN TREECTE AS P ON C.PDEPTID = P.DEPTID
INNER JOIN Tbl_CUSR AS CU ON C.DEPTID = CU.DEPTID
)
-- 최종 추출
SELECT
*
FROM TREECTE
ORDER BY SORT
잘 해결되셨나요...ㅎ
여기까지 MSSQL 계층형 부서 와 사용자 트리 쿼리에 대해서 알아보았습니다.
[MSSQL 계층형(Hierarchy) 및 숫자를 한글로 변환]
지난 글에서 더 나아가 사용자도 같이 보여줘야 하는 경우는 어떻게 할까요?
하여 오늘은 MSSQL 계층형 부서 와 사용자 트리 쿼리에 대해서 알아보겠습니다.
아래의 쿼리를 참고하시면 쉽게 작업이 가능하실거에요...ㅎ
;WITH TREECTE(DEPTID, PDEPTID, DEPTNM, SORT, [Level], GUBUN)
AS
(
-- 최상위 부서
SELECT
DEPTID
, ISNULL(PDEPTID, 0) AS PDEPTID
, DEPTNM
, CONVERT(VARCHAR, DEPTID) AS SORT
, 1 AS [Level]
, 'D' AS GUBUN
FROM Tbl_DEPT
WHERE PDEPTID IS NULL
UNION ALL
-- 최상위 부서 밑의 하위 부서
SELECT
C.DEPTID
, ISNULL(C.PDEPTID, 0) AS PDEPTID
, C.DEPTNM
, CONVERT(VARCHAR, P.SORT + ':' + CONVERT(VARCHAR, C.DEPTID)) AS SORT
, P.[Level] + 1 AS [Level]
, 'D' AS GUBUN
FROM Tbl_DEPT AS C
INNER JOIN TREECTE AS P ON C.PDEPTID = P.DEPTID
UNION ALL
-- 각 부서에 매핑되있는 사용자
SELECT
CU.CUSRUID AS DEPTID
, ISNULL(C.PDEPTID, 0) AS PDEPTID
, CU.CUSRNAM AS DEPTNM
, CONVERT(VARCHAR, P.SORT + ':' + CONVERT(VARCHAR, C.DEPTID) + ':' + CU.CUSRUID) AS SORT
, P.[Level] + 2 AS [Level]
, 'C' AS GUBUN
FROM Tbl_DEPT AS C
INNER JOIN TREECTE AS P ON C.PDEPTID = P.DEPTID
INNER JOIN Tbl_CUSR AS CU ON C.DEPTID = CU.DEPTID
)
-- 최종 추출
SELECT
*
FROM TREECTE
ORDER BY SORT
잘 해결되셨나요...ㅎ
여기까지 MSSQL 계층형 부서 와 사용자 트리 쿼리에 대해서 알아보았습니다.
댓글
댓글 쓰기