我想在某些条件下按折扣对产品进行分类
ORDER BY
CASE WHEN @OrderBy = 0
THEN table.id END ASC,
CASE WHEN @Orderby = 2
THEN table.id END ASC,
Run Code Online (Sandbox Code Playgroud)
我想做下面的事情,因为我没有表中的折扣列
CASE WHEN @OrderBy = 4
THEN (100-((table.price/table.oldprice)*100) as discount END ASC
Run Code Online (Sandbox Code Playgroud)
但它会抛出错误 - 我怎么能按折扣排序?
Stu*_*tLC 21
存在相当多的问题,例如,您不能在顺序中为计算字段设置别名,并且您需要转义表名,修复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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你需要动态改变ASC或DESC列,你可以使用像一个黑客这样通过乘以-1.
(另请注意,ORDER BY CASE ... END ASC, CASE ... END ASC将设置第一个和第二个排序...这似乎没有意义,因为@OrderBy只能有一个值)