首页 > 解决方案 > SQL Server - 列出经理及以上的员工

问题描述

假设我有一个这样的数据集(我使用员工和经理,因为这是一个很好的例子):

EmployeeID | ManagerID | Role          | ...
1          | NULL      | CEO
2          | 1         | Manager
3          | 1         | Manager
5          | 2         | Team-Leader
6          | 2         | Team-Leader
7          | 3         | Team-Leader
8          | 2         | Employee
9          | 5         | Employee
10         | 6         | Employee
11         | 6         | Employee
12         | 7         | Employee

我想列出EmployeeID所有在他之上担任角色的人。这是我想要的结果:

EmployeeID | ManagerID
12         | 7
12         | 3
12         | 1
12         | NULL
11         | 6
11         | 2
11         | 1
11         | NULL
....
9          | 5
9          | 2
9          | 1
9          | NULL

因此,如果我在结果中使用 a whereEmployeeID我可以让员工和他负责的每个人都高于他的职级。

我试图用递归 cte 来解决它,但这似乎根本没有解决。

有什么建议/想法吗?

标签: sql-servertsql

解决方案


尝试这个:

with cte1(EmployeeID, ManagerID) as
(
select EmployeeID, max(ManagerID)
from Employees
group by EmployeeID
union all
select t2.EmployeeID, t1.ManagerID
from Employees t1
join cte1 t2 on t2.ManagerID = t1.EmployeeID
)
select * from cte1
order by EmployeeID desc, ManagerID desc

推荐阅读