2

使用 case-then 块,我需要选择如何对我的 SQL 2008 查询进行排序,by[status] ASC, [date] DESC或 just [date] DESC

我只知道如何使用一列:

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0
        THEN R.[date] END DESC,
    CASE WHEN @flag = 1
        THEN R.[status] END ASC

如何在第二种情况下使用两列?

4

2 回答 2

3
  • 如果您的标志为 0,那么我们将按 (null, r.date desc) 排序。
  • 如果没有,我们将按 (r.Status, r.date desc) 排序

使用 CASE 表达式“投影”一个新的排序值。

SELECT *
FROM table
ORDER BY
  CASE WHEN @flag = 0 THEN r.Status ELSE null END,
  r.[date] desc
于 2009-08-18T00:37:24.823 回答
2

通常要放入条件排序,您只需重复 CASE 语句。

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0 THEN R.[date] END DESC,
    CASE WHEN @flag = 0 THEN R.[somethingelse] END ASC,
    CASE WHEN @flag = 1 THEN R.[status] END ASC
;

但在您的情况下,“日期”的重叠意味着您可以像 David B 的评论一样简化它。

于 2009-08-18T00:54:16.853 回答