반응형
MSSQL에서 GetRoot 함수는 계층 구조 데이터에서 특정 노드의 최상위 부모(루트)를 찾는 데 사용됩니다. 이 함수는 주어진 노드의 상위 부모를 재귀적으로 탐색하여 최상위 부모를 반환합니다.
일반적으로 GetRoot 함수는 계층 구조적인 데이터를 처리하거나 쿼리할 때 사용됩니다. 특히 부모-자식 관계를 가진 테이블이나 CTE(공통 테이블 표현식)를 사용하여 구성된 데이터에서 사용됩니다.
간단한 예시로 조직도를 가정해보겠습니다. 다음은 조직도를 나타내는 Employees 테이블이라고 가정합니다.
EmployeeID | EmployeeName | ManagerID
--------------------------------------
1 | John | NULL
2 | Alice | 1
3 | Bob | 1
4 | Carol | 2
5 | David | 3
위의 테이블은 EmployeeID로 식별되는 직원과 ManagerID로 식별되는 관리자 간의 계층적 관계를 보여줍니다. John은 최상위 관리자이며 다른 직원들은 그 밑에 있습니다.
이제 GetRoot 함수를 사용하여 각 직원의 최상위 부모를 찾는 쿼리를 작성해보겠습니다.
WITH EmployeeHierarchy AS (
SELECT EmployeeID, EmployeeName, ManagerID
FROM Employees
WHERE ManagerID IS NULL -- 최상위 노드(부모가 없는 노드)
UNION ALL
SELECT e.EmployeeID, e.EmployeeName, e.ManagerID
FROM Employees e
INNER JOIN EmployeeHierarchy eh ON e.EmployeeID = eh.ManagerID
)
SELECT EmployeeID, EmployeeName, ManagerID,
(SELECT GetRoot(ManagerID)) AS RootManagerID
FROM EmployeeHierarchy;
위의 쿼리에서는 CTE를 사용하여 계층적 구조를 정의하고, GetRoot 함수를 통해 각 직원의 최상위 부모(루트)를 찾습니다. 결과는 각 직원의 ID, 이름, 상위 관리자 ID 및 최상위 부모(루트)의 ID로 나타내어집니다.
GetRoot 함수는 계층적 데이터에서 각 노드의 최상위 부모를 찾을 때 유용하며, 데이터를 구조화하고 분석하는 데 도움이 됩니다.
반응형
'SQL > MSSQL' 카테고리의 다른 글
[MSSQL] GetReparentedValue 사용 방법 및 예시 (0) | 2024.04.23 |
---|---|
[MSSQL] IsDescendantOf 사용 방법 및 예시 (0) | 2024.04.23 |
[MSSQL] GetLevel 사용 방법 및 예시 (0) | 2024.04.22 |
[MSSQL] GetDescendant 사용 방법 및 예시 (0) | 2024.04.09 |
[MSSQL] GetAncestor 사용 방법 및 예시 (0) | 2024.04.09 |
[MSSQL] hierarchyid 메서드 사용 방법 및 예시 (0) | 2024.04.09 |
[MSSQL] smalldatetime 사용 방법 및 예시 (0) | 2024.04.09 |
[MSSQL] datetimeoffset 사용 방법 및 예시 (0) | 2024.04.09 |