我想在某些条件下按折扣分类产品
ORDER BY CASE WHEN @OrderBy = 0 THEN table.id END ASC,CASE WHEN @Orderby = 2 THEN table.id END ASC,
我想做一些像下面的东西,因为我没有表中的折扣列
CASE WHEN @OrderBy = 4 THEN (100-((table.price/table.oldprice)*100) as discount END ASC
但它会抛出一个错误 – 我如何按折扣排序?
解决方法
有很多问题,例如您不能按顺序排列计算字段,您将需要转义表名,修复cae并计算括号.
另外,由于看起来你只想在一个变量上进行CASE,所以可以将@OrderBy移动到CASE的顶部,如下所示:
SELECT * from [table] ORDER BY CASE @OrderBy WHEN 0 THEN [table].id -- ASC WHEN 2 THEN [table].id * -1 -- DESC ---I want to do something like below as I don't have discount column in table WHEN 4 THEN (100-([table].price/[table].oldprice)*100) END
另外,如果您需要动态更改列的ASC或DESC,则可以使用像this这样的黑客乘以-1.
(另请注意,ORDER BY CASE … END ASC,CASE … END ASC将设置第一个,然后第二个顺序…这似乎没有意义,因为@OrderBy只能有一个值)