Рекурсивный CTE, который получает сотрудников от менеджера - PullRequest
0 голосов
/ 12 ноября 2018

Я пишу рекурсивный 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
Мне нужно иметь столбец с именами «Имя менеджера» и «Фамилия менеджера», который берет каждое значение из столбца «Идентификатор сотрудника менеджера» и использует его для поиска правильного имени и фамилии из оригинала. рабочий стол. Я перепробовал много разных стратегий, но ничего не получается. Какие-либо предложения? Спасибо.

1 Ответ

0 голосов
/ 12 ноября 2018

Это не требует рекурсивного запроса, а просто левого соединения таблицы с самим собой:

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

Предполагается, что вам нужен только прямой менеджер каждого сотрудника.

...