Я пытаюсь получить повторных сотрудников (менеджеры - директор - генеральный директор, чтобы иметь полную иерархию) с DepartmentCode
аналогично столбцу Lvl
из результата рекурсивного запроса.
Найдена пара существующих вопросов и ответов, но они, похоже, не соответствуют моему случаю.Цель состоит в том, чтобы иметь полную иерархию до корневого узла (CEO), когда данные результата фильтруются с любым значением DepartmentCode
.Когда я попробовал использовать следующий рекурсивный CTE, он отлично смотрится со столбцом Lvl
, т. Е. Когда данные фильтруют любой идентификатор столбца Lvl
, он получает сотрудников, менеджеров, директоров и генерального директора (полная цепочка иерархии).
Мне интересно, может ли то же самое быть применено к столбцу DepartmentCode
с использованием Recursive CTE или с использованием другого подхода.Любой совет будет заметен!
Запрос, который я пытался , результат здесь .. (я в порядке с дублирующимися значениями, которые появляются в результате)
WITH CTE AS
(
SELECT E.EmployeeID, E.EmpName, E.Title, DepartmentCode, ' ' DepartTest, E.ManagerID, 1 as Lvl
FROM MyEmployees AS E
UNION ALL
SELECT E.EmployeeID, E.EmpName, E.Title, E.DepartmentCode, E.DepartmentCode, E.ManagerID, Lvl + 1
FROM MyEmployees AS E
JOIN CTE ON E.EmployeeID = CTE.ManagerID
--E.ManagerID = CTE.EmployeeID
)
SELECT * FROM CTE
Order by Lvl
go
Пример сценария данных:
CREATE TABLE dbo.MyEmployees
(
EmployeeID smallint NOT NULL,
EmpName nvarchar(30) NOT NULL,
Title nvarchar(50) NOT NULL,
DepartmentCode varchar(3),
ManagerID int NULL,
CONSTRAINT PK_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID ASC)
);
-- Populate the table with values.
INSERT INTO dbo.MyEmployees
(EmployeeID, EmpName, Title, DepartmentCode, ManagerID)
VALUES
(1, N'Ken', N'Chief Executive Officer', 'SMG', NULL)
,(201, N'Brian', N'Director', 'OPD',1)
,(301, N'Stephen', N'IT Manager', 'ICT',201)
,(302, N'Michael', N'IT Position1','ICT',301)
,(303, N'Linda', N'IT Position2','ICT', 301)
,(401, N'Syed', N'Procurement Position1','PRO',201)
,(402, N'Abbas', N'Procurement Position1','PRO',401)
,(403, N'Lynn', N'Procurement Position2','PRO',401)
GO