看起来在所有简单的情况下都已经询问并回答了这个问题,除了我遇到麻烦的情况之外。我尝试使用递归 CTE 来生成它;但也许光标会更好?或者也许一组递归函数可以解决问题?
这可以在 cte 中完成吗?
考虑下表
PrimaryKey ParentKey
1 NULL
2 1
3 6
4 7
5 2
6 1
7 NULL
应该产生
PK
1
-2
--5
-6
--3
7
-4
当 - 标记的数量等于深度时,我的主要困难是排序。
使用邻接列表模式有点麻烦,但可以使用递归 CTE 来完成:
WITH Hierarchy AS
(
SELECT
PrimaryKey, ParentKey,
CAST('/' + CAST(PrimaryKey AS varchar(10)) AS varchar(50)) AS [Path],
CAST('' AS varchar(50)) AS Prefix
FROM @Tbl
WHERE ParentKey IS NULL
UNION ALL
SELECT
t.PrimaryKey, t.ParentKey,
CAST(h.[Path] + '/' + CAST(t.PrimaryKey AS varchar(10)) AS varchar(50)),
CAST(h.Prefix + '-' AS varchar(50))
FROM Hierarchy h
INNER JOIN @Tbl t
ON t.ParentKey = h.PrimaryKey
)
SELECT [Path], Prefix + CAST(PrimaryKey AS varchar(10)) AS Node
FROM Hierarchy
ORDER BY [Path]
为了获得您想要的确切结果,您需要Prefix
列(进行“缩进”)和代理Path
列,它实际上进行排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)