我目前正在运行CTE查询,以便从employees表中递归构建员工层次结构,类似于大多数递归示例所演示的内容。我被困的地方是我正在尝试查询单个员工并检索他上面的层次结构。以下是我正在尝试使用的表的示例:
Employees
===========================================================================
EmployeeID MgrID Name
1 null Joe
2 1 John
3 2 Rob
4 2 Eric
以下是允许我从上到下显示层次结构的SQL:
with employeeMaster as (
select p.EmployeeID, p.MgrID, p.Name
from Employees p
where p.MgrID is null
union all
select c.EmployeeID, c.MgrID, c.Name
from employeeMaster cte inner join Employees c on c.MgrID = cte.EmployeeID
)
select * from employeeMaster
我陷入困境的是,我无法弄清楚如何查询最低级别的员工,Rob或Eric,并从Joe返回他上面的层次结构>约翰>埃里克。似乎这应该很容易,但我不能发现它的生命。
答案 0 :(得分:8)
您是否正在寻找一个查询来返回可变数量的列,具体取决于层次结构的深度?或者只是一个字段中的串联字符串?
这是对您的查询的一个小改动,它将使Eric和他上面的任何人进入层次结构。
WITH employeeMaster
AS ( SELECT p.EmployeeID ,
p.MgrID ,
p.NAME
FROM Employees p
WHERE p.NAME = 'Eric'
UNION ALL
SELECT c.EmployeeID ,
c.MgrID ,
c.NAME
FROM employeeMaster cte
INNER JOIN Employees c ON c.EmployeeID = cte.MgrID
)
SELECT *
FROM employeeMaster m