递归sql从无限节点中选择

递归sql从无限节点中选择,sql,sql-server,visual-studio-2010,sql-server-2008-r2,recursive-query,Sql,Sql Server,Visual Studio 2010,Sql Server 2008 R2,Recursive Query,我在sql中有这个表: TopicID Code Name ParentID ------- ---- ---- -------- 1 001 Parent1 0 2 001 Childp1 1 3 002 Parent2 0 4 001 Childp

我在sql中有这个表:

TopicID      Code       Name       ParentID
-------      ----       ----       --------
1            001        Parent1       0
2            001        Childp1       1
3            002        Parent2       0
4            001        Childp2       3
5            001        Childp21      4
.
.
etc
现在我想 1.get sql选择哪一个检索最后一个节点?(我是这样做的)

结果是:

TopicID      Code       Name       ParentID  |    newcolumn
-------      ----       ----       --------  |   ---------
2            001        Childp1       1      |    001001
5            001        Childp21      4      |    002001001
2.重要的一点是在上面的结果中显示每行从第一个节点到最后一个节点的代码浓度,就像上面的newcolumn一样,实际上我不能生成newcolumn?
*请注意,节点级别是无限的。

这可以通过以下方式相对轻松地完成:


这可以通过以下方法相对容易地完成:


谢谢你这么多漂亮的作品完美的“CHOGOK”谢谢你这么多漂亮的作品完美的“CHOGOK”
TopicID      Code       Name       ParentID  |    newcolumn
-------      ----       ----       --------  |   ---------
2            001        Childp1       1      |    001001
5            001        Childp21      4      |    002001001
with cte as (
    select
        T1.TopicID, T1.Code, T1.Name, T1.ParentID,
        T1.ParentID as NewParentID,
        cast(T1.Code as nvarchar(max)) as NewColumn
    from Table1 as T1
    where not exists (select * from Table1 as T2 where T2.ParentID = T1.TopicID)
    union all
    select
        c.TopicID, c.Code, c.Name, c.ParentID,
        T1.ParentID as NewParentID,
        c.NewColumn + cast(T1.Code as nvarchar(max)) as NewColumn
    from cte as c
        inner join Table1 as T1 on T1.TopicID = c.NewParentID
)
select
    c.TopicID, c.Code, c.Name, c.ParentID, c.NewColumn
from cte as c
where c.NewParentID = 0