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只能有一个值) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |