我的桌子最多有50行......如下所示。
ID menu dispOdr ParntID
---------------------
1 abc 1 0
2 cde 2 0
3 fgh 1 2
4 ghdfdj 2 2
5 tetss 1 1
6 uni 3 0
但我想要排序
喜欢
ID menu dispOdr ParntID
---------------------
1 abc 1 0
5 tetss 1 1
2 cde 2 0
3 fgh 1 2
4 ghdfdj 2 2
6 uni 3 0
如果有任何疑问请告诉我..提前致谢。
我正在使用sql server 2014
答案 0 :(得分:1)
我认为您需要反转当前与期望的输出。您说您希望菜单列已排序,但它似乎已经排序。
因此假设您实际上是从第二个表开始,您可以使用ORDER BY对菜单列进行排序:
SELECT *
FROM mytable
ORDER BY menu ASC
答案 1 :(得分:0)
我认为下面的查询会产生所需的输出:
SELECT t1.ID, t1.menu, t1.dispOdr, t1.ParntID
FROM mytable AS t1
LEFT JOIN mytable AS t2 ON t1.ParntID = t2.ID
ORDER BY CASE
WHEN t1.ParntID = 0 THEN t1.dispOdr
ELSE t2.dispOdr
END,
CASE
WHEN t1.ParntID = 0 THEN 1
ELSE 2
END,
t1.dispOdr
第一个CASE
表达式根据其父级的dispOdr
进行记录。第二个CASE
将父项放在其子组的顶部。最后,ORDER BY
子句中使用的最后一个表达式命令子组中的所有子记录。
注意:以上查询适用于一级嵌套。