通过经理获得员工的递归CTE

时间:2018-11-11 21:10:45

标签: sql recursion common-table-expression

我正在编写一个递归CTE,该CTE获取所有员工及其经理的列表。到目前为止,我有这个

WITH GetEmployeeByManager as 
(
--Anchor Query
SELECT FirstName, LastName, DepartmentID,ManagerEmployeeID
FROM dbo.Employees
WHERE ManagerEmployeeID IS NULL

Union ALL

--Recursive Query
SELECT FirstName, LastName, DepartmentID, ManagerEmployeeID
FROM dbo.Employees 
WHERE ManagerEmployeeID IS NOT NULL
)
SELECT *
FROM GetEmployeeByManager

Output so far
我需要有一个名为“经理姓氏”和“经理姓氏”的列,它们分别从“经理雇员ID”列中获取每个值,并使用它来从原始员工表。我尝试了许多不同的策略,但似乎没有任何效果。有什么建议么?谢谢。

1 个答案:

答案 0 :(得分:3)

这不需要递归查询,而只需将表与自身左连接:

SELECT e.FirstName, e.LastName, e.DepartmentID,
       m.FirstName as ManagerFirstName, m.LastName as ManagerLastName
FROM dbo.Employees e
LEFT OUTER JOIN dbo.Employees m ON m.EmployeeID = e.ManagerEmployeeID

假设您只希望每个员工的直接经理。