首页 > 解决方案 > Sql 查询从一张表中获取组织级别层次结构

问题描述

我有一张名为员工的表。请参考下表,我想要员工向哪个经理报告的级别。我不知道会是什么逻辑。我使用了 CTE,但没有得到预期的结果。在这种情况下,请帮助我获得预期的结果。

表员工

EmpID.                     EmpName.                         ManagerID
1                             A                                Null
2                             B                                  1
3                             C                                  1
4                             D                                  2
5                             E                                  3
6                             F                                  4
7                             G                                  5
8                             H                                  5

预期结果

EmpName.                      ManagerName                         Level
A                                Null                                1
B                                  A                                 2
C                                  A                                 2
D                                  B                                 3
E                                  C                                 4
F                                  D                                 5
G                                  E                                 6
H                                  E                                 6

标签: sql

解决方案


假设您正在使用Sql Server,您可以使用以下代码进行操作:

WITH cte (EmpId, EmpName, ManagerName, LEVEL) AS (
SELECT EmpId, EmpName, CAST('' AS VARCHAR) as ManagerName, 1 AS LEVEL
FROM Employee
WHERE ManagerId IS NULL

UNION ALL

SELECT e1.EmpId, e1.EmpName, CAST(cte.EmpName AS VARCHAR) ManagerName, (cte.LEVEL + 1) AS LEVEL
FROM Employee e1
    JOIN cte ON e1.ManagerId = cte.EmpId    
)

SELECT EmpName, ManagerName, LEVEL FROM cte
ORDER BY EmpName

请注意,您需要修改预期输出中的级别。例如,对于员工H,层次结构是H => E => C => A表明它的级别是4。正确的级别如下:

EmpName  ManagerName  Level    
A                     1
B        A            2
C        A            2
D        B            3
E        C            3
F        D            4
G        E            4
H        E            4

推荐阅读