2012-02-02 16 views
6

Tengo una tabla que tiene este aspecto:concatenación recursiva de Elementos primarios

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

me gustaría tener una visión devuelva esta:

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

Traté de la izquierda unirse a una vista que muestra una Identifica al primer padre y dejó unirlo consigo pero eso no funcionó.

¿Hay alguna manera de hacer esto sin un procedimiento/función almacenada? Tengo ~ 15k filas con ~ 0-5 padres cada uno, pero preferiría no codificar un máximo de 5 padres.

+0

No tengo un SSMS en esta compra. Verifique este enlace para obtener inspiración: http://www.codeproject.com/Articles/21082/Concatenate-Field-Values-in-One-String-Using-CTE-i – Malk

Respuesta

8

Puede utilizar un 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

Esto parece interesante. ¿Cómo lo haría con los elementos que pueden caer en múltiples nodos principales? Vea mi pregunta aquí http://stackoverflow.com/questions/31685852/sql-statement-to-concatenate-categories-from-hierarchical-structure-into-a-singl Espero que pueda ayudar! – Flo

Cuestiones relacionadas