sql - 在 SQL Server 中对分层表进行排序?
问题描述
我有一个表地址,我想对像parent-1 => all-child-parent-1, parent-2 => all-child-parent-2 这样的行进行排序......
地址表
ID Caption Parent
---------------------
1 A NULL
2 B NULL
3 a 1
4 b 2
5 bb 4
6 C NULL
7 aa 3
8 c 6
NULL Parent 是指 Root
期望的输出
ID Sort Caption Parent
---------------------------
1 1 A NULL
3 2 a 1
7 3 aaa 3
2 4 B NULL
4 5 b 2
5 6 bb 4
6 7 C NULL
8 8 c 6
解决方案
还有一种选择是使用hierarcyid
数据类型
例子
Declare @YourTable Table ([ID] int,[Caption] varchar(50),[Parent] int) Insert Into @YourTable Values
(1,'A',NULL)
,(2,'B',NULL)
,(3,'a',1)
,(4,'b',2)
,(5,'bb',4)
,(6,'C',NULL)
,(7,'aa',3)
,(8,'c',6)
;with cteP as (
Select ID
,Parent
,Caption
,HierID = convert(hierarchyid,concat('/',ID,'/'))
From @YourTable
Where Parent is null
Union All
Select ID = r.ID
,Parent = r.Parent
,Caption = r.Caption
,HierID = convert(hierarchyid,concat(p.HierID.ToString(),r.ID,'/'))
From @YourTable r
Join cteP p on r.Parent = p.ID)
Select Lvl = HierID.GetLevel()
,ID
,Parent
,Caption
From cteP A
Order By A.HierID
退货
Lvl ID Parent Caption
1 1 NULL A
2 3 1 a
3 7 3 aa
1 2 NULL B
2 4 2 b
3 5 4 bb
1 6 NULL C
2 8 6 c
推荐阅读
- java - Android Studio 不在某个布局文件中显示布局预览
- rest - 使用子列表作为查询参数设计 REST 端点
- sql-server - T-SQL 上的 XML 查询
- xml - 如何仅在 xsl 中的应用模板中的最后一个兄弟元素之后创建 div 元素?
- css - Fall-Back Fonts Outlook 2019——方法不起作用
- jwt - Atlassian Connect Express:使用 JSX 渲染器时无法与受保护的路由交互
- javascript - 使用 REST 未设置默认值从 SPO 列调用时填充流畅的 ui 下拉列表
- r - y 轴上的比例在 geom_col 上未正确缩放
- java - 如何使用 Mockito 模拟 @Inject Api-Class
- vue.js - 加载时选中复选框,并在存在值时填充输入框