USE [tempdb]
GO
-- Creating Employee details table
BEGIN
DROP TABLE
[EmpDetails]
END
GO
CREATE TABLE
[EmpDetails]
(EmpID VARCHAR (10),
EmpName VARCHAR (20),
ManagerID VARCHAR(10),
PRIMARY KEY (EmpID))
GO
INSERT INTO
[EmpDetails] VALUES ('100','ARKA GUPTTA',NULL)
INSERT INTO
[EmpDetails] VALUES ('101','SAIKAT','100')
INSERT INTO
[EmpDetails] VALUES ('102','DEBRAJ','100')
INSERT INTO
[EmpDetails] VALUES ('103','ANIRBAN','100')
INSERT INTO
[EmpDetails] VALUES ('104','SUMAN','101')
INSERT INTO
[EmpDetails] VALUES ('105','SUPRIYO','102')
INSERT INTO
[EmpDetails] VALUES ('106','AMLAN','102')
INSERT INTO
[EmpDetails] VALUES ('107','UTPAL','102')
INSERT INTO
[EmpDetails] VALUES ('108','PONCHU','105')
INSERT INTO
[EmpDetails] VALUES ('109','DEBABRATA','105')
INSERT INTO
[EmpDetails] VALUES ('110','BITTU','107')
GO
SELECT * FROM [EmpDetails]
GO
-- Excute the
below query to find the Manager of each Employee using Recursive CTE.
WITH
cteReports (EmpID, EmpName, ManagerID, OrganizationLevel)
AS
(
-- Anchor Query
SELECT A.EmpID, A.EmpName, A.ManagerID, 1
FROM dbo.[EmpDetails] A
WHERE A.ManagerID IS NULL
UNION ALL
SELECT A.EmpID, A.EmpName, A.ManagerID, R.OrganizationLevel + 1
FROM dbo.[EmpDetails] A
INNER JOIN cteReports R
ON A.ManagerID = R.EmpID
)
SELECT EmpID, EmpName, ManagerID,
(SELECT EmpName FROM [EmpDetails] WHERE EmpID = cteReports.ManagerID) 'ManagerName', OrganizationLevel
FROM cteReports
ORDER BY OrganizationLevel, ManagerID
No comments:
Post a Comment