使用不同时间的升序、降序和自定义顺序`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只有单个值似乎没有意义) |
|
|
|
|
|