【发布时间】:2020-09-23 15:22:01
【问题描述】:
我正在构建一个查询,该查询输出数据库中每个根的所有权层次结构。我正在成功使用递归 CTE,因为我目前可以实现以下数据输出:
rootID RootName RelatedName
1 ABA GPS
1 ABA PIG
1 ABA BBY
1 ABA PIG
2 PIG DDS
2 PIG GPS
我想要实现的是一个组 ID 列,其中的数据可能如下所示:
GroupID rootID RootName RelatedName
100 1 ABA GPS
100 1 ABA PIG
100 1 ABA BBY
100 1 ABA PIG
100 2 PIG DDS
100 2 PIG GPS
同样适用于组 200、300 等。对于每棵树。递归CTE的哪一部分可以注入代码来达到上述效果?
;WITH cte_Rel AS (
SELECT
<columns>
FROM #RawRel r
WHERE 1 = 1
AND <initial Conditions>
UNION ALL
SELECT
<Columns>
FROM #RawRel r
JOIN cte_Rel c ON r.RootName = c.RelatedName
)
SELECT DISTINCT * FROM cte_Rel
OPTION (MAXRECURSION 100)
【问题讨论】:
-
GroupID的值从何而来?既然都是一样的值,何不简单的100 AS GroupID? -
我的数据中会有多棵树...所以在上面的演示中,CTE 将生成这棵树 100,但也可能有其他树需要它们自己的 groupID。
-
所以我需要在这个 CTE 或其他东西中采用巧妙的递增策略......
标签: ssms hierarchical-data recursive-cte