首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server将所有子ID连接到父记录中分隔的字符串中

Server将所有子ID连接到父记录中分隔的字符串中
EN

Stack Overflow用户
提问于 2013-09-23 10:20:07
回答 1查看 2.6K关注 0票数 2

我有一个关于分层(邻接模型) SQL Server表的问题。此链接Get child records on one column演示如何使用所有子记录的连接列表填充父字段。因此,我桌子上的“儿童”栏变成:

代码语言:javascript
复制
ID ParentID Name   Children
1  NULL     Root   2,3
2  1        L2-1   4
3  1        L2-3   NULL
4  2        L3-4   6
5  3        L3-5   NULL
6  4        L4-6   NULL

有人能建议我如何做多个层次,即所有的后代,而不仅仅是直接的孩子?

也就是说,我希望这张桌子:

代码语言:javascript
复制
ID ParentID Name   Children
1  NULL     Root   2,3,4,5,6
2  1        L2-1   4,6
3  1        L2-3   5
4  2        L3-4   6
5  3        L3-5   NULL
6  4        L4-6   NULL

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-24 01:49:19

您可以使用下面的查询。我以为你的桌子名叫孩子。

它首先构建到顶部的父母列表(第一个查询)。然后将所有独立的分支放在一起(第二个查询)。

代码语言:javascript
复制
WITH temp (ID, ParentID, ChildrenChain)
AS
(
    SELECT ID, ParentID, CAST('' AS VARCHAR(100))
    FROM children
    WHERE NOT EXISTS (SELECT * FROM children cc WHERE cc.ParentID = children.ID)

    UNION ALL

    SELECT children.ID, children.ParentID, CAST((temp.ChildrenChain + ',' + CAST(temp.ID AS VARCHAR(100))) AS VARCHAR(100)) 
    FROM children
    INNER JOIN temp ON children.ID = temp.ParentID
)

SELECT DISTINCT ID,
    REPLACE(
        STUFF(
           (SELECT
                ',' + t2.ChildrenChain
                FROM temp t2
                WHERE temp.ID=t2.ID
                ORDER BY t2.ChildrenChain
                FOR XML PATH(''), TYPE
           ).value('.','varchar(max)')
           ,1,2, ''
        ), 
    ',,', ',') AS ChildValues
FROM temp
WHERE LEN(ChildrenChain) > 0

如果这对你不起作用,请告诉我。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18956837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档