2010-11-24 8 views
1

私が持っているこのテーブル私は私にこの結果を与えるだろうクエリ必要クエリ自体のFKと階層、ツリー、テーブル

Id PId  Name Value 
------------------------ 
1 null  foo  null 
2 1  bar  null 
3 2  foobar hi 
4 1  bar1 hey 

Name   | Value 
----------------------- 
foo bar foobar | hi 
foo bar1  | hey 

答えて

0
with s(id, pid, name, value) as 
(
select f.id, f.pid, cast(f.name as nvarchar) as name, f.value from foos f 
where f.pid is null 
union all 
select f.id, f.pid, cast(s.name + f.name as nvarchar) as name, f.value from foos f inner join s on f.pid = s.id 
) 
select * from s 
where not exists(select * from foos where pid = s.id)