sql - 0 在升序排序时排在最后

标签 sql sorting select sql-order-by

我试图从一张表中选择一个按价格、年份、名称和其他排序的产品列表....
问题是我必须在升序排序时将零值排在最后。

我的代码是:

SELECT * FROM Product P 
ORDER BY  CASE WHEN @OrderBy='Date ASC' THEN Date  END ASC,
          CASE WHEN @OrderBy='Price ASC' THEN Price  END ASC,
          CASE WHEN @OrderBy='Title ASC' THEN Title  END ASC,
          CASE WHEN @OrderBy='' THEN Match END

这有效,但不要将零放在列表底部。
因此,我尝试对其进行转换(请参阅下一个代码),但它给了我“,”附近的错误语法错误。
SELECT * FROM Product P
ORDER BY CASE WHEN @OrderBy='Price ASC' THEN 

           (case A.Price WHEN  0 THEN 1 ELSE 0  END,A.Price )

END ASC

我感谢任何帮助

最佳答案

您可以通过测试价格排序两次来做到这一点:

SELECT * FROM Product P 
ORDER BY  CASE WHEN @OrderBy='Date ASC' THEN Date  END ASC,
          CASE WHEN @OrderBy='Price ASC' THEN CASE WHEN Price = 0 THEN 1 ELSE 0 END ASC,
          CASE WHEN @OrderBy='Price ASC' THEN Price END ASC,
          CASE WHEN @OrderBy='Title ASC' THEN Title  END ASC,
          CASE WHEN @OrderBy='' THEN Match END

顺便说一下,当@orderBy时case表达式的隐含值不等于字符串为空。当排序列包含所有空值时,它有效地禁用了对该属性的排序。

关于sql - 0 在升序排序时排在最后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18830178/

相关文章:

SQL 汇总和平均

mysql - 如何按时间对事件表进行排序(具有不同的时区)?

sql - SQL Server T-SQL 中的整数最大值常量?

c# - 内存数据库中的 SqlLite : CREATE TABLE does not work?

Java:数组逆序排序方法

algorithm - 对于给定的图 G = (V,E),如何在 O(E+V) 时间内对它的邻接表表示进行排序?

mysql - 更好的 MySQL 查询?

c# - Xpath 节点选择 - 如何选择 2 个不同的元素?

mysql使用内部连接选择最高的唯一值

mysql - 在 MySql 中转换日期令人困惑