Как составить список нескольких иерархий из данных примера с определенным порядком для каждой иерархии - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь перечислить все иерархии в выборке данных, каждый набор иерархий имеет один идентификатор.

DROP TABLE IF EXISTS EmpGroup;

CREATE TABLE EmpGroup 
(
     Empid INT, 
     Dept VARCHAR(10), 
     MgrId INT
)
GO

INSERT INTO EmpGroup 
VALUES (1, 'Main', NULL), (2, 'IT', 1), (3, 'Dotcom', 2), (4, 'Finance', NULL),
       (5, 'HR', 4), (6, 'Accounting', 4), (7, 'main2', NULL), (8, 'IT1', 7)
GO

--select * from EmpGroup

;WITH cte AS
(
   SELECT 
       1 AS Lvl,
       EmpId LeafId,
       EmpID,
       MgrId,
       Dept,
       Dept LeafDept
   FROM 
       EmpGroup

   UNION ALL

   SELECT 
       Lvl+1 AS Lvl,
       OI.LeafId,
       OG.EmpId as rootGroupId,
       Og.MgrId,
       OG.Dept,
       OI.LeafDept
   FROM 
       EmpGroup OG 
   JOIN  
       cte OI ON OI.MgrId = OG.EmpId 
)
, cte_rn AS 
(
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY LeafID ORDER BY Lvl DESC) rn
    FROM 
        cte
)
SELECT * 
FROM cte_rn 
WHERE rn = 1

Вывод:

enter image description here

Шаг, который я хочу решить, заключается в добавлении идентификатора для каждой комбинации иерархии.

Итак, для строки 5 строка 4 является родительской.Аналогично, для строки 6 она также должна возвращать кажущуюся запись как 4.

Кроме того, для каждой комбинации иерархии должен быть назначен идентификатор.

Предполагаемый результат:

enter image description here

Я ищу оптимизированный способ достижения этого.Заранее спасибо за помощь!

...