排序升序时0到最后

POI*_*OIR 10 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
Run Code Online (Sandbox Code Playgroud)

这有效,但不要将零置于列表的底部.所以,我试图对其进行转换(请参阅下一个代码),但它在","附近给出了错误语法错误.

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
Run Code Online (Sandbox Code Playgroud)

我感谢任何帮助

Iai*_*der 2

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

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
Run Code Online (Sandbox Code Playgroud)

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