我有一张桌子,像这样:
oName oPost oPoint
A 1 NULL
B 2 1
C 3 1
D 4 1
E 5 2
F 6 2
G 7 3因此,如果我选择oName = A,那么结果应该是:
oName
A
B
C
D
E
F
G如果我选择oName = B,那么结果应该是:
oName
B
E
F我如何在SQL上做到这一点?
发布于 2020-04-04 11:03:34
您可以使用递归CTE从指定节点开始遍历层次结构:
DECLARE @name VARCHAR(1);
SET @name = 'A';
WITH CTE AS (
SELECT oName, oPost
FROM data
WHERE oName = @name
UNION ALL
SELECT d.oName, d.oPost
FROM data d
JOIN CTE ON CTE.oPost = d.oPoint
)
SELECT oName
FROM CTE
ORDER BY oName输出:
oName
A
B
C
D
E
F
G或者,如果使用SET @name='B',则输出为
oName
B
E
Fhttps://stackoverflow.com/questions/61023251
复制相似问题