ORDER BY具有相同优先级的不同列

时间:2012-01-30 13:17:51

标签: sql sql-server

我有一个包含2个日期列的表:

create_datemodify_date
始终设置create_date并且有时modify_date

现在我想用两个具有相同优先级的查询来命令我的查询。

如果我这样做:

order by create_date desc, modify_date desc

我首先获取按create_date排序的所有行,然后按modify_date排序,但我希望两行按相同的优先级排序。我需要这个:

create_date  |  modify_date
2011-12-31   |  -
2011-12-01   |  2011-12-30
2011-12-29   |  -

3 个答案:

答案 0 :(得分:5)

select *
from yourtable
order by coalesce(modify_date, create_date) desc

答案 1 :(得分:3)

使用ISNULL()modify_date排序,如果modify_dateNULL,则会使用create_date值:

ORDER BY ISNULL(modify_date, create_date) DESC

答案 2 :(得分:0)

列命名意味着modify_date未设置或高于创建日期,因此其他答案将起作用。如果没有,您可以使用描述为here的用户定义函数(调整为使用日期而不是int)。然后使用

ORDER BY dbo.HigherArgument(create_date, modify_date) DESC