我试图从一张表中选择一个按价格、年份、名称和其他排序的产品列表....
问题是我必须在升序排序时将零值排在最后。
我的代码是:
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/