Мне нужно создать список пользователей, которые являются менеджерами или менеджерами менеджеров, для отделов компании.
У меня есть две таблицы; один детализирует отделы, а другой содержит иерархию менеджеров (упрощенно):
CREATE TABLE [dbo].[Manager](
[ManagerId] [int],
[ParentManagerId] [int])
CREATE TABLE [dbo].[Department](
[DepartmentId] [int],
[ManagerId] [int])
По сути, я пытаюсь создать CTE, который даст мне список DepartmentIds вместе со всеми ManagerIds, которые находятся в иерархии менеджеров для этого отдела.
Итак ... Скажем, Менеджер 1 является менеджером для отдела 1, а Менеджер 2 является менеджером менеджера 1, а Менеджер 3 является менеджером менеджера 2, я бы хотел видеть:
DepartmentId, ManagerId
1, 1
1, 2
1, 3
По сути, менеджеры могут иметь дело со всеми отделами своих заместителей.
Построить CTE для возврата иерархии менеджера было довольно просто, но я изо всех сил пытаюсь внедрить туда департаменты:
WITH DepartmentManagers
AS
(
SELECT ManagerId,
ParentManagerId,
0 AS Depth
From Manager
UNION ALL
SELECT Manager.ManagerId,
Manager.ParentManagerId,
DepartmentManagers.Depth + 1 AS Depth
FROM Manager
INNER JOIN DepartmentManagers
ON DepartmentManagers.ManagerId = Manager.ParentManagerId
)
Мне нужен список всех департаментов вместе со всеми связанными с ними менеджерами.
Может кто-нибудь помочь?