조직도에서 상위조직 모두 가져오기
지난글에서는 조직도 데이터에서 특정노드의 하위데이터 전체를 가져오는 함수를 만들어봤습니다. 이번글 에서는 Top Down함수의 반대되는 개념으로 "특정노드의 상위노드 전체 가져오기(Bottom Up)함수"를 작성해 보겠습니다.
사용될 테이블 및 데이터는 지난 특정노드의 하위노드 전체 가져오기(Top Down) 글을 참고하시기 바랍니다.
테이블 반환 사용자 정의 함수 만들기
여기서는 조직코드를 파라메터로 넘기면 그 조직을 포함한 하위조직 전부를 반환하는 테이블 함수입니다.
Bottom Up함수도 Top Down과 유사하게 WITH CTE(Common Table Expression)의 재귀공통 테이블식을 사용하여 구현할 수 있습니다.
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- 특정조직의 하위조직 찾아오기 CREATE FUNCTION [dbo].[GetBottomUp](@DeptCd varchar(5)) RETURNS @rTable TABLE ( [DeptCd] nvarchar(5), [DeptName] nvarchar(50), [ParentDeptCd] nvarchar(5), [depth] [int] NOT NULL ) AS BEGIN WITH OrgTree(DeptCd, DeptName, ParentDeptCd, Depth) AS ( SELECT DeptCd, DeptName, ParentDeptCd, 0 AS Depth FROM Company WHERE DeptCd = @DeptCd UNION ALL SELECT COM.DeptCd, COM.DeptName, COM.ParentDeptCd, ORG.Depth + 1 FROM Company AS COM INNER JOIN OrgTree AS ORG ON COM.DeptCd = ORG.ParentDeptCd ) INSERT @rTable SELECT DeptCd, DeptName, ParentDeptCd, Depth
FROM OrgTree OPTION (MAXRECURSION 100); RETURN END
결과조회
위의 Bottom Up함수를 이용해 다음과 같이 특정조직의 모든 상위 조직을 가져올 수 있습니다.
--상황1. 인사팀 상위 조직 모두 가져오기 SELECT * FROM dbo.GetBottomUp('11220') --상황2. 경영지원본부 상위 조직 모두 가져오기 SELECT * FROM dbo.GetBottomUp('11000')
쿼리결과1
쿼리결과2
2018/12/07 - [MS-SQL] - 트리구조(Tree Structure)란?
2018/12/06 - [MS-SQL] - MSSQL 특정노드의 하위노드 전체 가져오기(Top Down)
2018/11/29 - [분류 전체보기] - MSSQL WITH CTE
'MS-SQL' 카테고리의 다른 글
트리구조(Tree Structure)란? (0) | 2018.12.07 |
---|---|
MSSQL 특정노드의 하위노드 전체 가져오기(Top Down) (1) | 2018.12.06 |
MSSQL 데이터 복사, 테이블 복사 SELECT INTO, INSERT SELECT를 이용한 백업 (0) | 2018.11.05 |
MSSQL UPDATE, UPDATE FROM (0) | 2018.10.24 |
mssql 변경 내용을 저장할 수 없습니다. 변경 내용을 적용하려면 다음 테이블을 삭제하고... 오류해결 (1) | 2018.10.23 |