Sql server SQL Server-列出经理及以上级别的员工

Sql server SQL Server-列出经理及以上级别的员工,sql-server,tsql,Sql Server,Tsql,假设我有这样一个数据集(我使用employee和manager,因为这是一个很好的示例): 我想把员工ID列出给所有在他之上的人。这是我的目标: EmployeeID | ManagerID 12 | 7 12 | 3 12 | 1 12 | NULL 11 | 6 11 | 2 11 | 1 11 | NULL .... 9 | 5 9

假设我有这样一个数据集(我使用employee和manager,因为这是一个很好的示例):

我想把
员工ID
列出给所有在他之上的人。这是我的目标:

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来解决这个问题,但似乎根本没有解决

有什么建议/想法吗?

试试这个:

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
试试这个:

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

请共享您的查询。我搜索并找到了这个,它看起来与您的问题非常相似。请共享您的查询。我搜索并找到了这个,它看起来与您的问题非常相似。这不完整。添加选项(MAXDOP 0)会使它永远运行。@AlanBurstein我刚刚用示例数据成功地重新运行了它。我的SQL Server版本是:SQL Server 2017(RTM-GDR)(KB4505224)-14.0.2027.2(X64)2019年6月15日00:26:19 Windows 10 Pro 10.0(Build 18362:)(虚拟机监控程序)上的快速版(64位)。是-我的坏。。。样本数据的复制和粘贴错误。我有重复的员工钥匙。@AlanBursteinThanks,你成就了我的一天。这还没有完成。添加选项(MAXDOP 0)会使它永远运行。@AlanBurstein我刚刚用示例数据成功地重新运行了它。我的SQL Server版本是:SQL Server 2017(RTM-GDR)(KB4505224)-14.0.2027.2(X64)2019年6月15日00:26:19 Windows 10 Pro 10.0(Build 18362:)(虚拟机监控程序)上的快速版(64位)。是-我的坏。。。样本数据的复制和粘贴错误。我有重复的员工钥匙。@AlanBursteinThanks,你让我很开心。