我在Common Table Expression上看到你的文章,上面有個遞歸的查詢。我如何修改這個查詢,以不同的格式顯示從樹上下到每個返回到結(jié)果集中的節(jié)點的路徑?例如,如果數(shù)據(jù)是:
ID ParentId
A null
B A
C A
D B
E C
我想要查詢返回的結(jié)果是:
ID Level Path
A 1 A
B 2 A.B
C 2 A.C
D 3 A.B.D
E 3 A.B.C
專家回答:
CREATE TABLE #x
(
ID CHAR(1),
ParentID CHAR(1)
)
INSERT #x (ID, ParentID)
SELECT 'A', NULL
UNION ALL
SELECT 'B', 'A'
UNION ALL
SELECT 'C', 'A'
UNION ALL
SELECT 'D', 'B'
UNION ALL
SELECT 'E', 'C'
;WITH FullPath AS
(
SELECT
ID,
1 AS Level,
CONVERT(VARCHAR(MAX), ID) AS Path
FROM #x
WHERE ParentID IS NULL
UNION ALL
SELECT
x.ID,
FP.Level + 1 AS Level,
FP.Path + '.' + x.ID AS Path
FROM #x AS x
JOIN FullPath FP ON x.ParentID = FP.ID
)
SELECT *
FROM FullPath
ID ParentId
A null
B A
C A
D B
E C
我想要查詢返回的結(jié)果是:
ID Level Path
A 1 A
B 2 A.B
C 2 A.C
D 3 A.B.D
E 3 A.B.C
專家回答:
CREATE TABLE #x
(
ID CHAR(1),
ParentID CHAR(1)
)
INSERT #x (ID, ParentID)
SELECT 'A', NULL
UNION ALL
SELECT 'B', 'A'
UNION ALL
SELECT 'C', 'A'
UNION ALL
SELECT 'D', 'B'
UNION ALL
SELECT 'E', 'C'
;WITH FullPath AS
(
SELECT
ID,
1 AS Level,
CONVERT(VARCHAR(MAX), ID) AS Path
FROM #x
WHERE ParentID IS NULL
UNION ALL
SELECT
x.ID,
FP.Level + 1 AS Level,
FP.Path + '.' + x.ID AS Path
FROM #x AS x
JOIN FullPath FP ON x.ParentID = FP.ID
)
SELECT *
FROM FullPath

