2

会社の部門のマネージャーまたはマネージャーのマネージャーであるユーザーのリストを生成する必要があります。

2つのテーブルがあります。1つは部門の詳細を示し、もう1つはマネージャー階層を含みます(簡略化)。

CREATE TABLE [dbo].[Manager](
[ManagerId] [int],
[ParentManagerId] [int])

CREATE TABLE [dbo].[Department](
[DepartmentId] [int],
[ManagerId] [int])

基本的に、DepartmentIdのリストと、その部門のマネージャー階層にあるすべてのManagerIdを提供するCTEを構築しようとしています。

つまり...マネージャー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
)

すべての部門と関連するすべてのマネージャーのリストが必要です。

誰か助けてもらえますか?

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 に答える