我有一张这样的表
id title display_order
1 t1 3
2 t2 1
3 t3 5
4 t4 4
5 t5 2
6 t6 0
7 t7 7
8 t8 6
9 t9 0
10 t10 0
我需要的是得到这样的结果
id title display_order
2 t2 1
5 t5 2
1 t1 3
4 t4 4
3 t3 5
8 t8 6
7 t7 7
...order of the rest is not important but should be in the result
6 t6 0
9 t9 0
10 t10 0
我可以通过两个SQL查询获得此结果,然后将它们组合起来。
有没有办法用一个SQL做到这一点?
由于
答案 0 :(得分:16)
SELECT *
FROM atable
ORDER BY
display_order = 0,
display_order
当display_order
为0时,第一个排序字词display_order = 0
的计算结果为True
,否则评估结果为False
。 True
之后False
排序 - 因此,第一个排序标准会确保display_order
为0的行在列表末尾排序。
第二个ORDER BY术语display_order
另外指定具有非零订单值的行的顺序。
因此,这两个标准为您提供了所需的排序顺序。
答案 1 :(得分:3)
尝试下面的一个 -
SELECT * FROM table_name
ORDER BY IF (display_order = 0, 9999999, display_order)
答案 2 :(得分:1)
如果有人需要,这是T-SQL中的解决方案
SELECT * FROM Table ORDER BY CASE WHEN display_order = 0 THEN display_order END ASC,CASE WHEN display_order > 0 THEN display_order END ASC