gpt4 book ai didi

Sql Hierarchy ID 按级别排序

转载 作者:行者123 更新时间:2023-12-01 01:21:33 26 4
gpt4 key购买 nike

是否可以通过层次结构 id 对层次结构中的 sql 数据进行排序,然后对于每个级别排序它按字母顺序说?

假设我们有一个员工表,它根据员工 ID 列出组织层次结构

你有鲍勃 (5),菲尔 (17) 和查理 (28) 向他报告,乔西 (6) 有泰勒 (15) 和迈克 (56) 向她报告。

如果按 HierarchyID 对其进行排序,它将如下所示:

鲍勃 (/5/)
--菲尔 (/5/17/)
--查理 (/5/28/)
乔西 (/6/)
--泰勒 (/6/15/)
--迈克 (/6/56/)

但让它看起来像可能更有意义

鲍勃
——查理
--菲尔
乔西
- 麦克风
——泰勒

这可能不会太复杂吗?

最佳答案

——这行得通吗?这是取自 Sorting tree with other column in SQL Server 2008

DECLARE @table TABLE (id INT NOT NULL PRIMARY KEY, name NVARCHAR(4000) NOT NULL, path HIERARCHYID)

INSERT
INTO @table
VALUES
(1, 'People', '/'),
(2, 'Girls', '/1/'),
(3, 'Boys', '/2/'),
(4, 'Zoey', '/1/1/'),
(5, 'Kate', '/1/2/'),
(6, 'Monica', '/1/3/'),
(7, 'Mark', '/2/1/'),
(8, 'David', '/2/2/')

;WITH q AS
(
SELECT *, HIERARCHYID::Parse('/') AS newpath
FROM @table
WHERE path = HIERARCHYID::GetRoot()
UNION ALL
SELECT t.*, HIERARCHYID::Parse(q.newpath.ToString() + CAST(ROW_NUMBER() OVER (ORDER BY t.name) AS NVARCHAR(MAX)) + '/')
FROM q
JOIN @table t
ON t.path.IsDescendantOf(q.path) = 1
AND t.path.GetLevel() = q.path.GetLevel() + 1
)
SELECT replicate(convert(nvarchar, '-'), q.path.GetLevel()) + q.name /*+ '(' + q.newpath.ToString() + ')'*/
FROM q
ORDER BY
newpath

关于Sql Hierarchy ID 按级别排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8899230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com