使用一个情况下-然后块,我需要选择如何对了我SQL2008查询,通过 [status] ASC, [date] DESC 或者只是 [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

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

有帮助吗?

解决方案

  • 如果你的标志是0,然后我们就会了 通过(null,r.日desc).
  • 如果没有,我们会 为了通过(r.状况r.日desc)

使用的情况下达到"项目"的一个新的价值,为排序。

SELECT *
FROM table
ORDER BY
  CASE WHEN @flag = 0 THEN r.Status ELSE null END,
  r.[date] desc

其他提示

通常把有条件的排序中,你只是重复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
;

但在你的情况下,“日期”的重叠意味着你可以把它简化像大卫B的评论。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top