gpt4 book ai didi

树形表的sql查询

转载 作者:行者123 更新时间:2023-12-02 08:04:25 27 4
gpt4 key购买 nike

我有一个树形结构的表:

id parentId name
----------------
1 0 Category1
2 0 Category2
3 1 Category3
4 2 Category4
5 1 Category5
6 2 Category6
7 3 Category7

在 SQL 查询结果中,我需要一个如下表:

id parentId level name
----------------------
1 0 0 Category1
3 1 1 Category3
7 3 2 Category7
5 1 1 Category5
2 0 0 Category2
4 2 1 Category4
6 2 1 Category6

谁能帮我写MS-SQL查询?谢谢!

最佳答案

扩展 a_horse_with_no_name 的答案,这展示了如何使用 SQL Server 的 implementation of recursive CTE (递归单记录交叉应用)与 row_number() 结合以产生问题中的精确输出。

declare @t table(id int,parentId int,name varchar(20))
insert @t select 1, 0 ,'Category1'
insert @t select 2, 0, 'Category2'
insert @t select 3, 1, 'Category3'
insert @t select 4 , 2, 'Category4'
insert @t select 5 , 1, 'Category5'
insert @t select 6 , 2, 'Category6'
insert @t select 7 , 3, 'Category7'
;

WITH tree (id, parentid, level, name, rn) as
(
SELECT id, parentid, 0 as level, name,
convert(varchar(max),right(row_number() over (order by id),10)) rn
FROM @t
WHERE parentid = 0

UNION ALL

SELECT c2.id, c2.parentid, tree.level + 1, c2.name,
rn + '/' + convert(varchar(max),right(row_number() over (order by tree.id),10))
FROM @t c2
INNER JOIN tree ON tree.id = c2.parentid
)
SELECT *
FROM tree
ORDER BY cast('/' + RN + '/' as hierarchyid)

说实话,使用 ID 本身来生成树“路径”是可行的,因为我们直接按 id 排序,但我想我应该插入 row_number() 函数。

关于树形表的sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5522478/

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