sql - 如何在 SQL Server 中循环以合并记录
问题描述
我有合并到 SQL Server 中合并记录的记录。我有兴趣使用 sql 循环到顶部记录。下面的例子清楚地说明了这个问题。
Tbl_Merge
有两列ChildRecord
和ParentRecord
:
ChildRecord ParentRecord
-----------------------------
101 102
102 103
103 104
我想要这个输出:
ChildRecord ParentRecord
-----------------------------
101 104
102 104
103 104
解决方案
您可以使用递归 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
推荐阅读
- npm - 使用 npm start 开始反应时出错
- python - 如何将“\”附加到模式或python中的任何给定字符串
- prolog - Prolog - if 语句失败后重做导致未实例化的变量?
- android - 清单合并失败并出现多个错误(向文件添加了接收者标签)
- pandas - 使用列值作为数据框中的列名
- c - 为什么在Linux kernel V5下,UDP connect和unconnect不起作用?
- c# - 带有桌面应用程序 .Net Win 表单的 Amazon 迭代
- reactjs - 让笑话/酶测试等待上下文
- csv - PowerBI - 多个 CSV 数据加载失败/无错误
- python - Python - 如何将一个数字除以一个复数,实现我自己的复数类?