Sql订单依据。。。对不同的升序、降序和自定义顺序使用“Case-When”
我想在一定条件下按折扣对产品进行分类Sql订单依据。。。对不同的升序、降序和自定义顺序使用“Case-When”,sql,sql-server,Sql,Sql Server,我想在一定条件下按折扣对产品进行分类 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 但
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
但它抛出了一个错误-我如何按折扣排序?在我看来,您需要类似的东西
select * from TableName where someCondition >100
order by
case when @OrderBy = 'AirlineService'
then AirlineService END desc,
case when @OrderBy = 'SomeMore'
then MyOtherColumn end
GO
如果你没有coulmn,那么你就不能处理它。请阅读此内容请记住-指定在SELECT语句中返回的列上使用的排序顺序。
希望有帮助。有很多问题,例如,您不能在order by中为计算字段别名,您需要转义表名,修复
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
另外,如果需要动态更改列的ASC
或DESC
,可以使用hack-like乘以-1
(还要注意,
OrderBy CASE…END ASC,CASE…END ASC
将设置第一个和第二个订单…考虑到@OrderBy
只能有一个值,这似乎没有意义)不要在ORDER BY
子句中计算折扣,而是在中选择
SELECT *, (100-(table.price/table.oldprice))*100 as discount
FROM table
它抛出了什么错误?将作为折扣删除。它完全位于错误的位置(表达式内部),您不能按
的顺序对表达式进行别名,因为这没有任何意义。asI作为折扣删除了单词附近的不正确语法,但在括号结尾处出现了错误。欢迎您,还有一件小事,即使选择列表中未指定该列,也将始终从中检索将按顺序指定的列名。您可以使用执行计划检查此行为。By(Stuartc)解决了我的问题,感谢您的支持Hazaart实际上我们可以按订单计算折扣,以上解决方案对我有效(StuartLC),您可以查看演示,实际上我已经按案例使用了asc和desc当@OrderBy=20时,然后(100-(table.price/table.oldprice)*100)结束描述,
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 discount END ASC