首页 > 解决方案 > 如何在 SQL Server 中循环以合并记录

问题描述

我有合并到 SQL Server 中合并记录的记录。我有兴趣使用 sql 循环到顶部记录。下面的例子清楚地说明了这个问题。

Tbl_Merge有两列ChildRecordParentRecord

ChildRecord     ParentRecord
-----------------------------
101             102
102             103
103             104

我想要这个输出:

ChildRecord     ParentRecord
-----------------------------
101             104
102             104
103             104

标签: sqlsql-server

解决方案


您可以使用递归 CTE。从没有任何孩子作为锚点的记录开始

; with rcte as
(
    -- anchor member : Parent record
    select  ChildRecord = t.ParentRecord, ParentRecord = NULL, RootRecord = t.ParentRecord
    from    yourtbl t
    where   not exists
            (
                select  *
                from    yourtbl x
                where   x.ChildRecord   = t.ParentRecord
            )

    union all

    -- recursive member
    select  ChildRecord = t.ChildRecord, ParentRecord = t.ParentRecord, RootRecord = r.RootRecord
    from    rcte r
            inner join yourtbl t    on  r.ChildRecord   = t.ParentRecord
)
select  r.ChildRecord, ParentRecord = r.RootRecord
from    rcte r
where   r.ParentRecord  is not null   -- exclude the anchor memmber

推荐阅读