반응형
Ant_U
DBA 개미
Ant_U
전체 방문자
오늘
어제
  • 분류 전체보기 (259) N
    • AWS (3)
    • C# (1)
    • SQL (233) N
      • MYSQL (183) N
      • MSSQL (50)
    • 자격증 (20)
      • SQLD (12)
      • SQLP (8)

인기 글

최근 글

250x250
hELLO · Designed By 정상우.
Ant_U

DBA 개미

[MSSQL] GetLevel 사용 방법 및 예시
SQL/MSSQL

[MSSQL] GetLevel 사용 방법 및 예시

2024. 4. 22. 10:55
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 사용 방법 및 예시  (1) 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
    'SQL/MSSQL' 카테고리의 다른 글
    • [MSSQL] IsDescendantOf 사용 방법 및 예시
    • [MSSQL] GetRoot 사용 방법 및 예시
    • [MSSQL] GetDescendant 사용 방법 및 예시
    • [MSSQL] GetAncestor 사용 방법 및 예시
    Ant_U
    Ant_U

    티스토리툴바