使用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中使用这两列?
答案 0 :(得分:3)
使用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的评论一样简化它。