树形表的sql查询
我有一个树形结构的表:
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 查询? 谢谢!
I have a table with tree structure:
id parentId name
----------------
1 0 Category1
2 0 Category2
3 1 Category3
4 2 Category4
5 1 Category5
6 2 Category6
7 3 Category7
In SQL query result I need a table like:
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
Who can help me to write MS-SQL query?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
扩展 a_horse_with_no_name 的答案,这展示了如何使用 SQL Server 的递归 CTE 的实现(递归单记录交叉应用)与 row_number() 结合以产生问题中的精确输出。
说实话,使用 ID 本身来生成树“路径”是可行的,因为我们直接按 id 排序,但我想我应该插入 row_number() 函数。
Expanding on a_horse_with_no_name's answer, this show how to use SQL Server's implementation of recursive CTE (recursive single-record cross apply) in combination with row_number() to produce the exact output in the question.
To be honest, using the IDs themselves to produce the tree "path" would work, since we are ordering directly by id, but I thought I'd slip in the row_number() function.
我目前手头没有 SQL Server 来测试它,因此其中可能存在一些拼写错误(语法错误)
I have currently no SQL Server at hand to test it, so there might be some typos (syntax errors) in there