I have a table with EmpID, EmpName, DeptName, ManagerID --- What I need a query where I can get Manager's Name, Department and all direct and indirect reports of the manager. The query will have lot more rows than source table as Each employee can be linked directly to a supervisor and then indirectly to supervisors of the direct supervisor. A supervisor will have multiple rows, one row each for direct reports and row each for each of the indirect reports; the level is multiple level deep... Any help will be appreciated. Thank You.
hope this link helps .. you can google search also .. lots of articles
it might be easier to do this
PROGRAMATICALLY
with a series of statements
preferably in a stored procedure
instead of one SQL Statement
is that OK ?
Thanks Harishgg1 - yes that should be ok.
Would you please post the sample data as CREATE TABLE and INSERT statement(s) that are directly usable rather than as a screen image?
hi
i tried to do this through a series of SQL statements and UNION ALL
there are some major issues with what i did
for example .. i hard coded = managerid is null and managerid =1
another thing .. is what about 8 iterations ( the code becomes humungous if i do this this way )
-- Lot of further work is left .. maybe a different approach
but any how ..something to go upon
please click arrow to the left for SQL script
SELECT
a.empid
,a.EmpName
,a.DeptName
,b.EmpID as EmpID1
FROM
( SELECT * FROM Employee WHERE ManagerID is null ) a JOIN Employee b on b.ManagerID = a.EmpID
UNION ALL
SELECT a.* FROM
(
SELECT
a.empid,a.EmpName,a.DeptName,b.EmpID as EmpID1
FROM
(
SELECT a.empid,a.EmpName,a.DeptName,b.EmpID as EmpID1 FROM ( SELECT * FROM Employee WHERE ManagerID is null ) a JOIN Employee b on b.ManagerID = a.EmpID
) a join Employee b on b.ManagerID = a.EmpID1
) a join Employee b on b.ManagerID = a.EmpID1
UNION ALL
SELECT a.* FROM
(
SELECT a.empid,a.EmpName,a.DeptName,b.EmpID as EmpID1
FROM
(
SELECT
a.empid,a.EmpName,a.DeptName,b.EmpID as EmpID1
FROM
(
SELECT a.empid,a.EmpName,a.DeptName,b.EmpID as EmpID1 FROM ( SELECT * FROM Employee WHERE ManagerID is null ) a JOIN Employee b on b.ManagerID = a.EmpID
) a join Employee b on b.ManagerID = a.EmpID1
) a join Employee b on b.ManagerID = a.EmpID1
) a join Employee b on b.ManagerID = a.EmpID
union all
SELECT
a.empid
,a.EmpName
,a.DeptName
,b.EmpID as EmpID1
FROM
( SELECT * FROM Employee WHERE Empid =1 ) a JOIN Employee b on b.ManagerID = a.EmpID
UNION ALL
SELECT
a.empid
,a.EmpName
,a.DeptName
,b.EmpID as EmpID1
FROM
(
SELECT
a.empid
,a.EmpName
,a.DeptName
,b.EmpID as EmpID1
FROM
( SELECT * FROM Employee WHERE Empid =1 ) a JOIN Employee b on b.ManagerID = a.EmpID
) a JOIN Employee b on b.ManagerID = a.EmpID1