回答

收藏

使用不同时间的升序、降序和自定义顺序`Case When`来进行Sql Order By

技术问答 技术问答 344 人阅读 | 0 人回复 | 2023-09-14

我想在一定条件下按折扣对产品进行分类
1 b; Q7 |" I3 o, yORDER BY     CASE WHEN @OrderBy = 0    THEN table.id END ASC,   CASE WHEN @Orderby = 2    THEN table.id END ASC,我想执行以下操作,因为表中没有折扣列
! _) F5 ~2 f; X/ q- {; T, f9 R: vCASE WHEN @OrderBy = 4THEN (100-((table.price/table.oldprice)*100) as discount END ASC但这会导致错误-如何按折扣排序?
2 q$ X9 Z2 g/ w                                                                * o6 D( U% |" Z& n2 ?! f$ i9 }) I1 S
    解决方案:                                                               
4 C1 A; g- T) J+ s& ~# E. h& j                                                                有很多问题,比如你不能按顺序使用计算字段的别名,你需要转换表名来修复cae,并计算括号。
2 [- U. `/ E8 B9 ?另外,因为你似乎只想CASE使用变量可以移动到@OrderByCASE顶部,如下所示:) i5 H+ Q4 A, H
SELECT * from [table]ORDER BY     CASE @OrderBy        WHEN          THEN [table].id -- ASC        WHEN                                                                    THEN [table].id * -1 -- DESC    ---I want to do something like below as I don't have discount column in table        WHEN                                                                                                                                                                                                             THEN (100-([table].price/[table].oldprice)*100)    ENDSqlFiddle在这里
5 r2 d6 j8 ^- f8 ]顺便说一句,如果你需要动态变化ASC或DESC列,你可以像黑客一样乘以-1。
& U0 G% ]- a$ u! M(请注意,这个ORDER BY CASE ... END ASC,CASE ... ENDASC设置第一顺序,然后设置第二顺序…鉴于@OrderBy只有单个值似乎没有意义)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则