我需要为公司部门生成管理员或管理人员的用户列表。
我有两张桌子;一个详细说明了部门,另一个包含了经理层次结构(简化):
CREATE TABLE [dbo].[Manager](
[ManagerId] [int],
[ParentManagerId] [int])
CREATE TABLE [dbo].[Department](
[DepartmentId] [int],
[ManagerId] [int])
基本上,我正在尝试构建一个CTE,它将为我提供一个DepartmentId列表,以及该部门管理器层次结构中的所有ManagerIds。
所以...说经理1是部门1的经理,经理2是经理1的经理,经理3是经理2的经理,我想看看:
DepartmentId, ManagerId
1, 1
1, 2
1, 3
基本上,管理人员可以与所有子经理的部门打交道。
构建CTE以返回Manager层次结构非常简单,但我很难在那里注入Departments:
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
)
我需要一份所有部门的清单以及所有相关的经理。
有人可以帮忙吗?
答案 0 :(得分:1)
更改您的锚点查询:
WITH DepartmentManagers
AS
(
SELECT d.DepartmentID,
d.ManagerId,
m.ParentManagerId
0 AS Depth
FROM Department d
JOIN Manager m
ON m.ManagerID = d.managerID
WHERE DepartmentID = 1
UNION ALL
SELECT d.DepartementID,
m.ManagerId,
m.ParentManagerId,
d.Depth + 1
FROM DepartmentManagers d
JOIN Manager m
ON m.ManagerId = d.ParentManagerID
)