2015-05-26 81 views
3

我有一個表,如下一些數據:顯示嵌套的父子關係

ID  Name  ParentID 
----------------------------- 
1   A   NULL 
2   B   NULL 
3   C   1 
4   D   2 
5   E   3 

正如你可以看到E爲碳的孩子這是我要尋找一個簡單的SQL A的孩子查詢可以返回一個字符串,如給出一個子ID,例如ID = 5,這爲E應該有如下一些:

Data 
----- 
A -> C -> E 

我曾嘗試下面的查詢,但停留在前進的道路

SELECT a.ID, 
     a.Name, 
     COALESCE(b.Name, '->') AS 'ParentName' 
FROM MyTable AS a 
LEFT JOIN MyTable AS b ON a.ID = b.ID 
WHERE a.ID = 5 

任何援助將不勝感激。

回答

3

試試這個:

with cte as(
    select * from t where id = 5 
    union all 
    select t.id, t.name, t.pid from cte c 
    join t on c.pid = t.id) 
select replace(stuff((select '-' + name from cte 
order by id 
for xml path('')), 1, 1, ''), '-', '->') 

小提琴http://sqlfiddle.com/#!3/6fdde1/19

+0

感謝這..這是優秀的,正是我需要的。 –