データベース内の各ルートの所有権階層を出力するクエリを作成しています。現在、次のデータ出力を達成できるという点で成功している再帰的 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)