У меня есть стол 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        |
+-------------------+----------------+-----------------+

Этот пост был очень похож на то, чего я хотел достичь: Сортировка данных по текущей дате , однако я не был уверен, как добиться того же на сервере sql. Это мой первый пост, поэтому дайте мне знать, как я могу улучшить свой вопрос и пост.

2
Chase T 25 Июн 2020 в 00:55

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.

1
GMB 24 Июн 2020 в 21:57