2010-11-24 63 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)