2012-02-02 22 views
6

ben şöyle bir tablo var:Rekürsif Birleştirme Elemanları

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

Bir görünümü bu iade istiyorum:

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

Bir gösteren bir görünüm katılmak sola çalıştı Kimlikler ilk ebeveyn ve kendi başına katılmadan sol ama bu işe yaramadı.

Saklı yordam/işlev olmadan bunu yapmanın bir yolu var mı? ~ 0-5 ebeveyn ile her biri ~ 15k satır var ama zor kod 5 ebeveynleri tercih etmem.

+0

Bu bilgisayarda bir SSMS yok. İlham almak için bu bağlantıyı kontrol edin: http://www.codeproject.com/Articles/21082/Concatenate-Field-Values-in-One-String-Using-CTE-i – Malk

cevap

8

Bir recursive CTE kullanabilirsiniz.

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

Bu ilginç görünüyor. Birden çok üst düğümün altına girebilecek öğelerle nasıl yaparsınız? Soruma bakın http://stackoverflow.com/questions/31685852/sql-statement-to-concatenate-categories-from-hierarchical-structure-into-a-singl Yardım edersiniz! – Flo