Sql server SQL Server-列出经理及以上级别的员工
假设我有这样一个数据集(我使用employee和manager,因为这是一个很好的示例): 我想把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
员工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,你让我很开心。