ORDER BY CASE中的几个列

时间:2009-08-18 00:29:00

标签: sql sql-server-2008 tsql sql-order-by case-when

使用case-then块,我需要选择如何通过[status] ASC, [date] DESC[date] DESC来订购我的SQL 2008查询。

我只知道如何使用一列:

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

如何在第二个CASE中使用这两列?

2 个答案:

答案 0 :(得分:3)

  • 如果您的旗帜为0,那么我们会订购 by(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

答案 1 :(得分: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
;

但在你的情况下,'date'的重叠意味着你可以像David B的评论一样简化它。