作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在特定条件下按折扣对产品进行排序
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
但它抛出一个错误 - 我如何按折扣排序?
最佳答案
有很多问题,例如您不能在 order by 中为计算字段添加别名,并且需要转义表名、修复 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 的 hack。乘以 -1。
(另请注意,ORDER BY CASE ... END ASC, CASE ... END ASC
将设置第一个和第二个排序...考虑到这似乎没有意义@OrderBy
只能有一个值)
关于Sql Order By ...使用 `Case When` 进行不同的升序、降序和自定义顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16936891/
我是一名优秀的程序员,十分优秀!