728x90
반응형
MSSQL에서 GetLevel은 계층 구조 데이터를 처리할 때 사용되는 유용한 함수 중 하나입니다. 이 함수는 특정 레코드가 계층 구조에서 어느 수준(level)에 있는지를 결정하는 데 사용됩니다. 보통 이 함수는 계층적 데이터 모델(예: 조직도, 부서 구조, 트리 구조 등)를 쿼리하고 처리할 때 사용됩니다.
일반적으로 GetLevel 함수는 Common Table Expressions (CTE) 또는 재귀 쿼리와 함께 사용됩니다. CTE를 사용하여 계층적 데이터를 구성하고 GetLevel 함수를 이용하여 각 노드의 수준을 결정할 수 있습니다.
간단한 예시로 조직도를 가정해보겠습니다. 다음은 조직도를 나타내는 Employees 테이블이라고 가정합니다.
EmployeeID | EmployeeName | ManagerID
--------------------------------------
1 | John | NULL
2 | Alice | 1
3 | Bob | 1
4 | Carol | 2
5 | David | 3
위의 테이블은 EmployeeID로 식별되는 직원과 ManagerID로 식별되는 관리자 간의 계층적 관계를 보여줍니다. John은 최상위 관리자이며 다른 직원들은 그 밑에 있습니다.
이제 GetLevel 함수를 사용하여 각 직원의 수준을 결정하는 쿼리를 작성해보겠습니다.
WITH EmployeeHierarchy AS (
SELECT EmployeeID, EmployeeName, ManagerID, 1 AS Level
FROM Employees
WHERE ManagerID IS NULL -- 최상위 레벨
UNION ALL
SELECT e.EmployeeID, e.EmployeeName, e.ManagerID, eh.Level + 1 AS Level
FROM Employees e
INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
)
SELECT EmployeeID, EmployeeName, ManagerID, Level,
CASE Level
WHEN 1 THEN 'CEO'
WHEN 2 THEN 'Manager'
ELSE 'Employee'
END AS Position
FROM EmployeeHierarchy;
위의 쿼리에서는 CTE를 사용하여 계층적 구조를 정의하고, GetLevel 함수를 통해 각 직원의 수준(Level)을 결정합니다. 결과는 각 직원의 ID, 이름, 상위 관리자 ID, 수준(Level) 및 직급(Position)으로 나타내어집니다.
GetLevel 함수는 계층적 데이터를 쿼리하고 처리할 때 유용하며, 데이터를 효율적으로 구성하고 분석하는 데 도움이 됩니다.
728x90
반응형
'SQL > MSSQL' 카테고리의 다른 글
[MSSQL] GetReparentedValue 사용 방법 및 예시 (0) | 2024.04.23 |
---|---|
[MSSQL] IsDescendantOf 사용 방법 및 예시 (0) | 2024.04.23 |
[MSSQL] GetRoot 사용 방법 및 예시 (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 |