Sql 父元素的递归连接
我有一张这样的桌子:Sql 父元素的递归连接,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张这样的桌子: 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
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
我试图左加入一个显示IDs第一个父视图的视图,左加入它本身,但没有成功
有没有一种方法可以在没有存储过程/函数的情况下执行此操作?我有~15k行,每个行有~0-5个父级,但我不想硬编码最多5个父级。不确定这是否适合您,但您是否查看了新的层次结构ID 您可以使用
我在这个公司没有SSMS。查看此链接获取灵感:这看起来很有趣。如何处理可能属于多个父节点的项?看到我的问题了,希望你能帮忙!
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;