【问题标题】:CTE to build a list of departments and managers (hierarchical)CTE 建立部门和经理列表(分层)
【发布时间】: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


    【解决方案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
            )
    

    【讨论】:

    • 对不起 - 我有点不清楚我需要结果包含什么。我想列出所有部门及其所有经理 - 这将构成视图的基础。谢谢
    • 啊。如果经理是多个部门的经理,这似乎不起作用。我发现我正在处理的数据非常糟糕:经理也可以是他们自己的经理!?我已经更新了我的帖子以反映这一点。
    • @Milky:您能否比“似乎不起作用”更明确地表达这个问题?最好的方法是使用示例记录集和所需结果更新您的帖子。
    • 我已将您的回复标记为答案。公平地说,你已经完美地回答了我最初的问题。只是,深入挖掘之后,数据稍微复杂了一点。看起来我需要进一步充实经理层级的东西。为您的帮助干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多