2012-02-02 69 views
6

我有一個表,看起來像這樣:遞歸級聯元素

ID  |Name |Parent 
1  |A  |NULL 
2  |B  |NULL 
3  |C  |1 
4  |D  |1 
5  |E  |3 
6  |F  |5 

我想有一個視圖返回此:

ID  |Name |ParentNames 
1  |A  | 
2  |B  | 
3  |C  |A 
4  |D  |A 
5  |E  |A > C 
6  |F  |A > C > E 

我試圖離開參加展示的一個視圖身份證第一個父母並將其與自己一起加入,但沒有奏效。

有沒有辦法做到這一點沒有存儲過程/函數?我有~15K行,每個〜0-5個父母,但我寧願不要硬編碼最多5個父母。

+0

我沒有SSMS這個組件。檢查這個鏈接的靈感:http://www.codeproject.com/Articles/21082/Concatenate-Field-Values-in-One-String-Using-CTE-i – Malk 2012-02-02 05:55:21

回答

8

可以使用recursive CTE

declare @T table(ID int, Name char(1), Parent int); 

insert into @T values 
(1  ,'A'  ,NULL), 
(2  ,'B'  ,NULL), 
(3  ,'C'  ,1), 
(4  ,'D'  ,1), 
(5  ,'E'  ,3), 
(6  ,'F'  ,5); 

with C as 
(
    select ID, 
     Name, 
     Parent, 
     cast('' as varchar(max)) as ParentNames 
    from @T 
    where parent is null 
    union all 
    select T.ID, 
     T.Name, 
     T.Parent, 
     C.ParentNames + ' > ' + C.Name 
    from @T as T   
    inner join C 
     on C.ID = T.Parent 
)  
select ID, 
     Name, 
     stuff(ParentNames, 1, 3, '') as ParentNames 
from C;  
+0

這看起來很有趣。你會如何處理可能屬於多個父節點的項目?在這裏看到我的問題http://stackoverflow.com/questions/31685852/sql-statement-to-concatenate-categories-from-hierarchical-structure-into-a-singl 希望你能幫助! – Flo 2015-07-28 20:45:06

3

不確定這對您是否有可能,但是您是否查看了新的層次結構ID?

http://msdn.microsoft.com/en-us/library/bb677290.aspx

+0

哇,從來不知道這種數據類型,我正在閱讀現在就來... – Greg 2012-02-02 05:52:25

+0

很高興知道。 – 2012-02-02 08:15:23