会社の部門のマネージャーまたはマネージャーのマネージャーであるユーザーのリストを生成する必要があります。
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
)
すべての部門と関連するすべてのマネージャーのリストが必要です。
誰か助けてもらえますか?