[英]Hierarchical query in SQL Server 2005
我在SQL Server 2005的表中有一個數據結構,表示一個相關對象鏈。 每個對象可以在許多步驟中進行替換。 我想執行一個查詢,該查詢返回替換鏈中的所有對象和每個對象的葉子。
數據:
id replacement
1 null
2 3
3 null
4 5
5 6
6 null
結果應為:
id replacement
1 null
2 3
3 null
4 6
5 6
6 null
我相信遞歸CTE是一個不錯的選擇,但是我無法解決。 這個問題的一個約束是我不能更改數據結構,因為數據庫不在我的控制之下。
看看這個
DECLARE @Table TABLE(
ID INT,
ReplacementID INT
)
INSERT INTO @Table (ID,ReplacementID) SELECT 1, NULL
INSERT INTO @Table (ID,ReplacementID) SELECT 2, 3
INSERT INTO @Table (ID,ReplacementID) SELECT 3, NULL
INSERT INTO @Table (ID,ReplacementID) SELECT 4, 5
INSERT INTO @Table (ID,ReplacementID) SELECT 5, 6
INSERT INTO @Table (ID,ReplacementID) SELECT 6, NULL
INSERT INTO @Table (ID,ReplacementID) SELECT 7, 8
INSERT INTO @Table (ID,ReplacementID) SELECT 8, 9
INSERT INTO @Table (ID,ReplacementID) SELECT 9, 10
INSERT INTO @Table (ID,ReplacementID) SELECT 10, NULL
SELECT * FROM @Table
;WITH repl AS (
SELECT *, 1 AS Depth
FROM @Table t
UNION ALL
SELECT r.ID,
t.ReplacementID,
r.Depth + 1
FROM repl r INNER JOIN
@Table t ON r.ReplacementID = t.ID
WHERE t.ReplacementID IS NOT NULL
)
SELECT repl.ID,
repl.ReplacementID
FROM (
SELECT ID,
MAX(Depth) Depth
FROM repl
GROUP BY ID
) Depths INNER JOIN
repl ON Depths.ID = repl.ID
AND Depths.Depth = repl.Depth
ORDER BY 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.