加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sql Order By …使用“Case When”为不同的升序,降序和自定义订

发布时间:2020-12-12 16:38:37 所属栏目:MsSql教程 来源:网络整理
导读:我想在某些条件下按折扣分类产品 ORDER BY CASE WHEN @OrderBy = 0 THEN table.id END ASC,CASE WHEN @Orderby = 2 THEN table.id END ASC, 我想做一些像下面的东西,因为我没有表中的折扣列 CASE WHEN @OrderBy = 4THEN (100-((table.price/table.oldprice)*1
我想在某些条件下按折扣分类产品
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

SqlFiddle Here

另外,如果您需要动态更改列的ASC或DESC,则可以使用像this这样的黑客乘以-1.

(另请注意,ORDER BY CASE … END ASC,CASE … END ASC将设置第一个,然后第二个顺序…这似乎没有意义,因为@OrderBy只能有一个值)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读