【问题标题】:Multiple column in single case in order by clause in SQL Server 2016SQL Server 2016 中按子句排序的单个案例中的多列
【发布时间】:2019-03-11 14:40:06
【问题描述】:

我编写了一个查询,其中我有一个条件来按如下所示按单顺序按多列对数据进行排序。

ORDER BY Column1 ASC, Column2 ASC, Column3 ASC

ORDER BY Column1 DESC, Column2 DESC, Column3 DESC

我想通过如下表达式按条件顺序编写上述排序

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

但上面的查询给出了语法错误。谁能帮我找出解决问题的方法?

【问题讨论】:

    标签: sql asp.net sql-server database sql-server-2012


    【解决方案1】:

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

    如果@SortExpression 只会设置一个值。如果 CASE WHEN 不匹配条件将返回 NULL 然后 let 将只执行您期望的订单列。

    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 
    

    【讨论】:

    • 你对你的回答和上面的回答是一样的,对我来说效果很好....标记哪个回答对我来说真的很难。总之非常感谢。 :)
    【解决方案2】:

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

    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
    

    【讨论】:

    • 你的答案和你的答案是相同的,对我来说效果很好....标记哪个答案对我来说真的很难。总之非常感谢。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多