Case statement for Order By clause with Desc/Asc sort

后端 未结 3 974
感情败类
感情败类 2021-02-14 16:07
SELECT *
FROM
    TableName
WHERE
ORDER BY 
    CASE @OrderByColumn
    WHEN 1 THEN Forename
    WHEN 2 THEN Surname
    END;

I have a statement like a

相关标签:
3条回答
  • 2021-02-14 16:40

    You need to split your ORDER BY in two parts:

    SELECT *
    FROM
        TableName
    WHERE
    ORDER BY 
        (CASE @OrderByColumn
        WHEN 1 THEN Forename
        END) DESC -- Forename --> descending
    ,   (CASE @OrderByColumn
        WHEN 2 THEN Surname
        END) ASC -- Surname --> ascending
    
    0 讨论(0)
  • 2021-02-14 16:44

    You need two clauses in the order by:

    ORDER BY (CASE WHEN @OrderByColumn = 1 and @Dir = 'ASC' THEN Forename
                   WHEN @OrderByColumn = 2 and @Dir = 'ASC' THEN Surname
              END) ASC,
             (CASE WHEN @OrderByColumn = 1 and @Dir = 'DESC' THEN Forename
                   WHEN @OrderByColumn = 2 and @Dir = 'DESC' THEN Surname
              END) DESC
    
    0 讨论(0)
  • 2021-02-14 16:46

    another example:

    SELECT * FROM dbo.Employee
    ORDER BY 
     CASE WHEN Gender='Male' THEN EmployeeName END Desc,
     CASE WHEN Gender='Female' THEN Country END ASC
    

    more details ...http://codechef4u.com/post/2015/04/07/order-by-clause-with-case-expressions-case-statement

    0 讨论(0)
提交回复
热议问题