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

前端之家收集整理的这篇文章主要介绍了Sql Order By …使用“Case When”为不同的升序,降序和自定义订单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在某些条件下按折扣分类产品
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只能有一个值)

原文链接:https://www.f2er.com/mssql/81688.html

猜你在找的MsSQL相关文章