/ / SQL Server: Йерархична заявка с дълбочина - sql-server, tsql

SQL Server: Йерархична заявка с дълбочина - sql-сървър, tsql

Трябва да покажа на служителя и на неговия мениджър дълбочина.

Ако Саймън е топ мениджър и мениджърът на Кейти е Саймън и Джон, мениджърът е Кейти, то нивото на Саймън ще бъде 0, защото той е на върха и нивото на Кейти ще бъде 1, а нивото на Джон ще бъде 2.

Опитах по-долу начин, но не получаване на желания изход. Моля, кажете ми какво да поправя в кода.

Моят код:

Declare @ID INT
SET @ID = 6;

WITH EmployeeCTE AS
(
SELECT
ID, Name, MgrID, 0 AS level
FROM
Employee
WHERE
ID = @ID

UNION ALL

SELECT
emp.ID, emp.Name, emp.MgrID, level+1 AS level
FROM
Employee emp
JOIN
EmployeeCTE ON emp.ID = EmployeeCTE.MgrID
)
--select * from EmployeeCTE
SELECT
e1.Name, ISNULL(e2.Name, "Top BOSS") as [Manager Name],
e2.level
FROM
EmployeeCTE e1
LEFT JOIN
EmployeeCTE e2 ON e1.MgrID = e2.ID

Отговори:

1 за отговор № 1

Тъй като това е Node-to-Top, забележете в крайното изберете [Level]

;WITH EmployeeCTE AS
(
Select ID,Name,MgrID, 0 as level FROM @Employee
WHERE ID=3
UNION ALL
Select r.ID,r.Name,r.MgrID, level+1 as level
FROM @Employee r
JOIN EmployeeCTE p on r.ID = p.MgrID
)
Select e1.Name
,ISNULL(e2.Name,"Top BOSS") as [Manager Name]
,row_number() over (order by e1.level  desc) as [Level]
from EmployeeCTE e1
left join EmployeeCTE e2 on e1.MgrID=e2.ID

Се завръща

Name    Manager Name    Level
Simon   Top BOSS        1
Katie   Simon           2
John    Katie           3