I have a parent child table in sql server 2005
I would like to select all descendants of each entry.
Using cte allows me to retrieve details from the immediate parent.
in this example, 4 reports to 3, 3 reports to 2, 2 reports to 1, 1 is the top
declare @person as table (person_id int, person_name varchar(20),parent_id int)
insert into @person values (1, 'person 1' ,null)
insert into @person values (2, 'person 2' ,1)
insert into @person values (3, 'person 3' ,2)
insert into @person values (4, 'person 4' ,3)
with cte as (
select person_id, person_name,parent_id, convert (varchar (20), 'no parent') as parent_name
from @person where parent_id is null
union all
select p.person_id, p.person_name,p.parent_id, cte.person_name as parent_name
from @person p
inner join cte on cte.person_id = p.parent_id
)
select * from cte
returns
person_id person_name parent_id parent_name
1 person 1 NULL no parent
2 person 2 1 person 1
3 person 3 2 person 2
4 person 4 3 person 3
I would like to return
person_id person_name parent_id parent_name
1 person 1 NULL no parent
2 person 2 1 person 1
3 person 3 2 person 2
4 person 4 3 person 3
-- additional redundant rows
3 person 3 1 person 1
4 person 4 2 person 2
4 person 4 1 person 1
is this possible?
thanks John
insert into @person values (1, 'person 1' ,null)
insert into @person values (2, 'person 2' ,1)
insert into @person values (3, 'person 3' ,2)
insert into @person values (4, 'person 4' ,3)
;with cte as (
select person_id, person_name,parent_id, convert (varchar (20), 'no parent') as parent_name
from @person --where parent_id is null
union all
select p.person_id, p.person_name,p.parent_id,
from @person p
inner join cte on cte.person_id = p.parent_id
)
select distinct *
from cte