【发布时间】:2010-05-21 17:03:55
【问题描述】:
我需要为公司部门生成作为经理或经理的经理的用户列表。
我有两张桌子;一份详细说明部门,一份包含经理层级(简化):
CREATE TABLE [dbo].[Manager](
[ManagerId] [int],
[ParentManagerId] [int])
CREATE TABLE [dbo].[Department](
[DepartmentId] [int],
[ManagerId] [int])
基本上,我正在尝试构建一个 CTE,它会给我一个 DepartmentId 列表,以及该部门经理层次结构中的所有 ManagerId。
所以...假设经理 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
)
我需要一份所有部门以及所有相关经理的列表。
谁能帮忙?
【问题讨论】:
标签: sql recursion hierarchy common-table-expression