具有多列和 Desc/Asc 排序的 Order By 子句的 CASE 语句

新手上路,请多包涵

继我之前的问题之后, 使用 Desc/Asc 排序的 Order By 子句的 Case 语句, 我有这样的语句:

 SELECT
    *
FROM
    TableName
WHERE
ORDER BY
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC,
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC

这很好用,但有时我需要的不仅仅是按顺序排列的列。我实际上需要这样的东西:

 .....
ORDER BY
    CASE @OrderByColumn WHEN 1 THEN Forename, Date, Location END DESC

我不知道如何使 CASE 语句允许 THEN 部分中的多个列。

原文由 volume one 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 406
2 个回答

你需要这个吗?

 ORDER BY
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, Date, Location,
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC

原文由 Tim Schmelter 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以编写多个案例,即使它们都具有相同的条件。

 ORDER BY
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC,
    CASE @OrderByColumn WHEN 1 THEN Date END,
    CASE @OrderByColumn WHEN 1 THEN Location END,
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC

实际上,您没有指定要排序的列,而是一个表达式。

如果条件不满足,case语句返回null,所以实际上它的意思是:

 CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END

因此,如果@OrderByColumn 不为 1,则该语句始终返回 NULL。顺便说一句,这并不排除它进行排序,而是将所有这些行放在结果中,使“SurName”成为该组行中的决定性排序。

原文由 GolezTrol 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进