如何以特定格式排列Sql行

时间:2016-10-04 12:48:24

标签: sql sql-server sql-server-2014

我的桌子最多有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

2 个答案:

答案 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子句中使用的最后一个表达式命令子组中的所有子记录。

注意:以上查询适用于一级嵌套。