Create Table EmployeeTable ([EmployeeId] int, [Name] varchar(10), [ManagerId] int)
INSERT EmployeeTable VALUES (1,'Jane', NULL ) -- StaffHierarchy is as follows:
INSERT EmployeeTable VALUES (2,'Robert',1) --
1-Jane
INSERT EmployeeTable VALUES (3,'Tony',2) --
/ \
INSERT EmployeeTable VALUES (4,'Albert',3) --
2-Robert 9-Felix
INSERT EmployeeTable VALUES (5,'David',3) -- / \ \
INSERT EmployeeTable VALUES (6,'Heskey',2) -- 3-Tony 6-Heskey 10-Kent
INSERT EmployeeTable VALUES (7,'Marco',6) -- / \
/ \
INSERT EmployeeTable VALUES (8,'Judy',6) -- 4-Albert 5-David
7-Marco 8-Judy
INSERT EmployeeTable VALUES (9,'Felix',1) --
INSERT EmployeeTable VALUES (10,'Kent',9)
DECLARE @employeeId int
= 4;
WITH StaffHierarchy AS
(
SELECT
A.[EmployeeId], A.[Name], A.ManagerId, 0 AS [Level]
FROM EmployeeTable A
WHERE A.EmployeeId=@employeeId OR (@employeeId IS NULL AND A.ManagerId IS NULL)
UNION ALL
SELECT
B.[EmployeeId], B.[Name], B.ManagerId, C.[Level]+1
FROM StaffHierarchy C
INNER JOIN EmployeeTable B ON C.ManagerId=B.[EmployeeId]
)
SELECT EmployeeId,
[Name],
ManagerId,
[Level]
FROM StaffHierarchy
ORDER BY ManagerId asc;
No comments:
Post a Comment