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 계층형 부서 와 사용자 트리 쿼리에 대해서 알아보았습니다.

댓글

이 블로그의 인기 게시물

껌 떼는 법 (완벽 제거)

석청 효능 및 석청 부작용 알아보기

인성검사 팁 (인성검사 합격)