首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2016中单个情况下的多列order子句

Server 2016中单个情况下的多列order子句
EN

Stack Overflow用户
提问于 2018-10-06 07:13:39
回答 2查看 414关注 0票数 2

我编写了一个查询,在该查询中,我有一个条件,可以按以下顺序按多个列对数据进行排序。

代码语言:javascript
复制
ORDER BY Column1 ASC, Column2 ASC, Column3 ASC

代码语言:javascript
复制
ORDER BY Column1 DESC, Column2 DESC, Column3 DESC

我想按表达式按条件排序,如下所示

代码语言:javascript
复制
ORDER BY 
    CASE WHEN @SortExpression = 'Id ASC' THEN Id END ASC,    
    CASE WHEN @SortExpression = 'Id DESC' THEN Id END DESC,    
    CASE WHEN @SortExpression = 'Status ASC' THEN Status END ASC,    
    CASE WHEN @SortExpression = 'Status DESC' THEN Status END DESC,   
    CASE WHEN @SortExpression = 'Country ASC' THEN Country Asc, City Asc, Zip Asc END,    
    CASE WHEN @SortExpression = 'Country DESC' THEN Country DESC, City DESC, Zip DESC END

但是上面的查询会产生语法错误。有人能帮我找出解决我问题的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-06 07:30:37

CASE WHEN @SortExpression = 'Country ASC' THEN Country Asc, City Asc, Zip Asc END,没有语法,您需要编写,让每个订单在一个CASE WHEN中。

如果@SortExpression只设置一个值。如果CASE WHEN不匹配,条件将返回NULL,那么let将只执行expect order列。

代码语言:javascript
复制
ORDER BY 
    CASE WHEN @SortExpression = 'Id ASC' THEN Id END ASC,    
    CASE WHEN @SortExpression = 'Id DESC' THEN Id END DESC,    
    CASE WHEN @SortExpression = 'Status ASC' THEN Status END ASC,    
    CASE WHEN @SortExpression = 'Status DESC' THEN Status END DESC,   
    CASE WHEN @SortExpression = 'Country ASC' THEN Country END Asc ,
    CASE WHEN @SortExpression = 'Country ASC' THEN City END Asc ,
    CASE WHEN @SortExpression = 'Country ASC' THEN Zip END Asc ,   
    CASE WHEN @SortExpression = 'Country DESC' THEN Country END DESC , 
    CASE WHEN @SortExpression = 'Country DESC' THEN City END DESC , 
    CASE WHEN @SortExpression = 'Country DESC' THEN Zip END DESC 
票数 1
EN

Stack Overflow用户

发布于 2018-10-06 07:33:01

您的case语句需要重写下面的方式,然后编写多个列,这是不正确的(THEN Country Asc, City Asc, Zip Asc END)

代码语言:javascript
复制
ORDER BY 
(CASE @SortExpression  when 'Id ASC'
 THEN Id End) ASC,    
(CASE @SortExpression WHEN 'Id DESC'
THEN Id END) DESC,    
(CASE @SortExpression 
WHEN 'Status ASC' 
THEN Status END ) ASC,    
(CASE @SortExpression WHEN 'Status DESC'
 THEN Status END) DESC,   
(CASE @SortExpression WHEN 'Country ASC' 
THEN Country end) Asc,
(CASE @SortExpression WHEN 'Country ASC' 
THEN City end) Asc,
(CASE @SortExpression WHEN 'Country ASC' 
THEN Zip end) Asc,         
( CASE @SortExpression  WHEN 'Country DESC'
THEN Country end ) DESC ,
( CASE @SortExpression  WHEN 'Country DESC'
THEN City end ) DESC,
( CASE @SortExpression  WHEN 'Country DESC'
THEN Zip end ) DESC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52676627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档