【发布时间】:2016-06-07 00:49:40
【问题描述】:
我有基于树结构的记录(父子关系),我想实现嵌套级别排序。基本上,我需要基于级别的排序以及需要 维护父子关系(排序子级)。我曾尝试使用 CTE,但我只能实现基于级别的排序,但问题是无法实现 父子关系。
我试过下面的查询
SELECT * FROM EMP WHERE PARENTID IS NULL order by
CASE WHEN PARENTID IS NULL THEN
lower(name)
ELSE
(SELECT lower(name) FROM EMP WHERE ID=ROOTID) END DESC,
ROOTID, JOBLEVEL, NAME
实际表格
ID PARENTID NAME FULLPATH LEVEL ROOTID
_____________________________________________________________
1 NULL AA 1 1 1
2 1 BB 1.2 2 1
3 1 ZZ 1.3 2 1
4 1 HH 1.4 2 1
5 2 RR 1.2.5 3 1
6 2 CC 1.2.6 3 1
7 3 DD 1.3.7 3 1
8 3 UU 1.3.8 3 1
9 4 GG 1.4.9 3 1
10 4 LL 1.4.10 3 1
11 NULL KK 11 1 11
12 11 VV 11.12 2 11
实际的树结构
AA
BB
ZZ
HH
RR
CC
DD
UU
GG
LL
KK
VV
预期的表格升序
ID PANTID NAME FULLPATH LEVEL
____________________________________________
1 NULL AA 1 1
2 1 BB 1.2 2
6 2 CC 1.2.6 3
5 2 RR 1.2.5 3
4 1 HH 1.4 2
9 4 GG 1.9.4 3
10 4 LL 1.4.10 3
3 1 ZZ 1.3 2
7 3 DD 1.3.7 3
8 3 UU 1.3.8 3
11 NULL KK 11 1
12 11 VV 11.12 2
预期的升序树结构
AA
BB
CC
RR
HH
GG
LL
ZZ
DD
UU
KK
VV
预期的表格降序
ID PARENTID NAME FULLPATH LEVEL
________________________________________________
11 NULL KK 11 1
12 11 VV 11.12 2
1 NULL AA 1 1
3 1 ZZ 1.3 2
7 3 DD 1.3.7 3
8 3 UU 1.3.8 3
4 1 HH 1.4 2
9 4 GG 1.9.4 3
10 4 LL 1.4.10 3
2 1 BB 1.2 2
6 2 CC 1.2.6 3
5 2 RR 1.2.5 3
预期的下降树结构
KK
VV
AA
ZZ
UU
DD
BB
RR
CC
HH
LL
GG
【问题讨论】:
-
如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行并单击编辑器上的“代码示例”按钮 (
{ })工具栏以很好地格式化和语法突出显示它!并确保结果有意义,并且看起来对其他正在查看并试图理解它的人相当有用! -
我看你不喜欢接受答案,有什么理由吗?
-
道歉,如何接受答案?
标签: sql sql-server sql-server-2008 tsql