Click here to Skip to main content
15,880,967 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
Hi All,
I've a table whose schema and sample data are as follows:

EmpCode               ManagerCode
=========             =============
1                        1
2                        1
3                        2
4                        2
5                        3
6                        2
7                        3
8                        4

The name of the table is EMP

Now my task is to create a query which will give a hierarchy of manager against a particular EmpCode. Say for example for EmpCode 7 the output will be

EmpCode
=======
1
2
3

I've tried with self join but its giving only the immediate manager not the total hierarchy. It will be of great help if provided with any clue to achieve this result
Posted
Comments
Hiren solanki 29-Dec-10 6:30am    
Reply : so it will return 1,2,3,4 ? do you want it to be different. ?
senguptaamlan 29-Dec-10 6:33am    
can be depending upon the empID...1,2,3,4 are not static data...they are given just for an example.
Hiren solanki 29-Dec-10 6:33am    
I've got the problem actually, It needs some extra efforts.
Hiren solanki 30-Dec-10 8:21am    
see my updated answer, I've written a complete trip for you on the otherside.
Hiren solanki 31-Dec-10 0:51am    
You could read the 'story behind' of that TIP, and you could vote also if you liked it.

What about THIS

select distinct managerid from EMP where managerid <= (select managerid from EMP where empid=7)


You could try building Recursive CTE[^] for data hirarchy.

See my newly written TIP[^] only for you.
 
Share this answer
 
v3
Comments
senguptaamlan 29-Dec-10 6:28am    
if I give empID = 8 ?
Hiren solanki 29-Dec-10 6:32am    
Okey I got the problem actually now, Let me try it.
senguptaamlan 31-Dec-10 0:46am    
@Hiren thanks man....
Maybe the following article will help you :
http://www.sqlteam.com/article/more-trees-hierarchies-in-sql[^]

Cheers
 
Share this answer
 
Comments
Dylan Morley 29-Dec-10 5:54am    
good article
senguptaamlan 29-Dec-10 5:58am    
yeah provides a good solution, but breaks down my present DB Structure if I'm gonna use the depth, Lineage columns...
Hi,

SQL
create procedure testemp(@empid int)
as
begin
declare @temp int;
create table #temp (mgrid int,);
select @temp=mgrid  from empmgr  where empid =@empid;
insert into  #temp (mgrid)  values (@temp);
while (@temp != @empid)
begin
select @temp=mgrid , @empid =empid  from empmgr where empid =@temp;
insert into  #temp (mgrid)  values (@temp);
end
select * from #temp;
end


SQL
CREATE TABLE [dbo].[empmgr](
    [empid] [int] NULL,
    [mgrid] [int] NULL
) ON [PRIMARY]
 
Share this answer
 
Comments
fjdiewornncalwe 29-Dec-10 16:23pm    
My vote of 1.... WTF!!!
SQL
declare @empid int;
 set @empid = 7;
 with cte_report
 as
 ( select empcode,managercode from [Test].[dbo].[Emp_manager]  where empcode = @empid

 union all

 select e.empcode,e.managercode from  [Test].[dbo].[Emp_manager]   as e
 inner join cte_report as m
 on e.empcode = m.managercode )
 select managercode from cte_report  order by managercode asc
 
Share this answer
 
Comments
Jörgen Andersson 28-Jun-15 14:38pm    
Why do you wake up a five year old question that HAS an accepted answer?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900