具有Desc/Asc排序的Order By子句的Case语句

vol*_*one 8 sql t-sql sql-server

SELECT *
FROM
    TableName
WHERE
ORDER BY 
    CASE @OrderByColumn
    WHEN 1 THEN Forename
    WHEN 2 THEN Surname
    END;
Run Code Online (Sandbox Code Playgroud)

我有一个上面的声明,让我动态选择如何订购查询的结果.但是,如何指定我要订购Forename DESC和Surname ASC?

das*_*ght 18

您需要分为ORDER BY两部分:

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
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 5

您需要在两个子句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
Run Code Online (Sandbox Code Playgroud)