我有一张桌子WebOrder
下面是表格的简化版本(我省略了本文不需要的大多数列)
+-------------------+----------------+ |Field |Type | +-------------------+----------------+ |WebOrderID |Int | |DueDate |Date | |Customer |nvarchar(50) | +-------------------+----------------+
我想按到期日排序,这很容易
SELECT * FROM WebOrder ORDER BY DueDate
但是,我想进一步进行排序,将在当前日期到期的WebOrders显示在顶部,然后将在较晚日期到期的WebOrders依次显示,最后将在之后到期的WebOrders依次过去截止日期。
下面是输出示例的示例
+-------------------+----------------+-----------------+ |WebOrderID |DueDate |Customer | +-------------------+----------------+-----------------+ |23 |2020-06-24 |Phillip Fry | |2 |2020-06-24 |Karen Clay | |35 |2020-06-26 |George Sun | |64 |2020-06-28 |Austin Powers | |1 |2020-06-01 |Wu Lang | |12 |2020-06-05 |Jessica Myers | |6 |2020-06-07 |Sarah Red | +-------------------+----------------+-----------------+
这篇文章与我想要实现的内容非常相似,Sorting data according to current date,但是我不确定如何在sql server中实现相同的功能。 这是我的第一篇文章,所以让我知道如何改善我的问题和文章。
答案 0 :(得分:1)
考虑条件排序:
order by
case
when dueDate = cast(getdate() as date) then 0
when dueDate > cast(getdate() as date) then 1
else 2
end,
dueDate
order by
子句中的第一个表达式优先于当前日期记录,然后优先于将来的记录。第二个排序标准然后按dueDate
对子集进行排序。