У меня есть стол WebOrder
Ниже представлена упрощенная версия таблицы (я пропустил большинство столбцов, которые не были необходимы для этого сообщения)
+-------------------+----------------+ |Field |Type | +-------------------+----------------+ |WebOrderID |Int | |DueDate |Date | |Customer |nvarchar(50) | +-------------------+----------------+
Я хотел бы отсортировать по сроку, что достаточно просто с
SELECT * FROM WebOrder ORDER BY DueDate
Однако я хотел бы пойти дальше в этой сортировке и сделать так, чтобы 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 | +-------------------+----------------+-----------------+
Этот пост был очень похож на то, чего я хотел достичь: Сортировка данных по текущей дате a>, однако я не был уверен, как добиться того же на сервере sql. Это мой первый пост, поэтому дайте мне знать, как я могу улучшить свой вопрос и пост.
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
.
Похожие вопросы
Связанные вопросы
Новые вопросы
sql-server
Microsoft SQL Server — это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков Microsoft SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. д.). Не используйте этот тег для вопросов по программному обеспечению и разработке мобильных устройств, если только он не связан напрямую с базой данных.