假设我有一个这样的数据集(我使用employee和manager,因为这是一个很好的示例):
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因此,如果我在结果中使用EmployeeID上的where,我可以获得员工和他所负责的级别以上的每个人。
我试着用递归cte来解决这个问题,但这似乎根本行不通。
有什么建议/想法吗?
发布于 2019-09-13 00:18:44
试试这个:
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 deschttps://stackoverflow.com/questions/57910596
复制相似问题