SQL:按优先级排序,但最后输入0

时间:2013-02-22 11:32:54

标签: sql sqlite sql-order-by android-sqlite

我有一个名为“priority”的(int)列。当我选择我的项目时,我希望最高优先级(最低编号)为最高优先级,最低优先级(最高编号)为最后一个。

但是,没有优先级的项目(当前优先级为0)应该在具有优先级的列之后列出其他列。

换句话说。如果我有这些优先事项:

 1 2 0 0 5 0 8 9

我如何按照这样排序:

 1 2 5 8 9 0 0 0 

我想我可以使用Int.max而不是0,但是0组成了一个很好的默认值,我会尽量保留。

5 个答案:

答案 0 :(得分:15)

我认为它不会比这更清洁:

ORDER BY priority=0, priority

SQLFiddle Demo

请注意,与其他任何解决方案不同,此解决方案将利用priority上的索引,并且如果记录数量很大,则会很快。

答案 1 :(得分:6)

尝试:

order by case priority when 0 then 2 else 1 end, priority

答案 2 :(得分:2)

一个非常简单的解决方案可能是使用复合值/“前缀”进行排序,如下所示:

SELECT ...
FROM ...
ORDER By CASE WHEN priority = 0 THEN 9999 ELSE 0 END + priority, secondSortCriteriaCol

答案 3 :(得分:1)

这样就可以了。您需要将testtable替换为您的表名。

SELECT t.priority
FROM dbo.testtable t
ORDER BY (CASE WHEN t.priority = 0 THEN 2147483647 ELSE t.priority END)

如果不清楚,我已经选择了2147483647,因为这是优先级列的最大值,因此它将是最后一个。

Mark的答案更好,并且可以选择一个。

答案 4 :(得分:0)

order by case(priority) when 0 then 10 else priority end