2

我需要为公司部门生成一个用户列表,这些用户是经理或经理的经理。

我有两张桌子;一份详细说明部门,一份包含经理层级(简化):

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
)

我需要所有部门以及所有相关经理的列表。

任何人都可以帮忙吗?

4

1 回答 1

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
        )
于 2010-05-21T17:08:26.207 回答