SQL Упорядочить по: определенное значение Сначала, затем упорядочение? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть оператор выбора, который должен упорядочить результаты по двум столбцам.Моя проблема в том, что мне нужно применять порядок только в первом столбце, когда есть определенное значение.В противном случае, я хочу, чтобы результаты сортировались по второму столбцу.

Я уверен, что мое объяснение сбило с толку большинство людей, поэтому вот пример: в большинстве случаев я хочу, чтобы результаты сортировались по столбцу B (Дата) DESC.Однако есть ситуации, когда мне нужно, чтобы записи показывались выше (или до) даты заказа.Это происходит, когда столбец A (Состояние) имеет значение «Требуется ответ».Итак, если Status = 'Needs Response', тогда он мне нужен в верхней части результатов, но, если он имеет какое-либо другое значение, он должен быть упорядочен только по Date в порядке DESC.

В моих попыткахДля этого я работал с инструкциями CASE, но каждая попытка приводит к тому, что все результаты упорядочиваются по Status и , а затем по Date.То, что мне нужно, это начальный заказ, чтобы применить только , когда значение статуса = 'Требуется ответ'.

Status         |  Date
---------------------------
Done           |  11/25/2018
Done           |  11/12/2018
Confirm        |  10/10/2018
Needs Response |  12/5/2018
Acknowledge    |  12/8/2018
Confirm        |  12/1/2018
Needs Response |  11/24/2018
Confirm        |  12/10/2018

Используя те же данные выше, независимо от того, как я пытаюсь это сделать, я всегдасначала получите данные, отсортированные по статусу, а затем по дате.При использовании оператора CASE я могу получить «Требуется ответ» в начало результатов, но остальные записи все еще сортируются по состоянию до даты.

Мой желаемый результат выборки данных будет следующим:

Status         |  Date
---------------------------
Needs Response |  12/5/2018
Needs Response |  11/24/2018
Confirm        |  12/10/2018
Acknowledge    |  12/8/2018
Confirm        |  12/1/2018
Done           |  11/25/2018
Done           |  11/12/2018
Confirm        |  10/10/2018

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы должны иметь возможность управлять этим с помощью предложения ORDER BY, например:

ORDER BY 
    CASE WHEN Status = 'Needs Response' THEN 0 ELSE 1 END,
    Date desc

Таким образом, в основном вы должны отсортировать два поля:

  • сначала,вычисленное значение, которое будет 0, когда Status имеет значение Needs Response;во всех остальных случаях должно отображаться 1.Это позволит отображать статус Need Response первым, а все остальные значения будут иметь одинаковое значение, в результате чего в игру вступит следующее поле сортировки

  • , а затем Date

0 голосов
/ 10 декабря 2018

Используйте выражение case, чтобы поместить строки ответа первой необходимости.Тогда порядок по дате по убыванию:

order by case when status = 'Needs Response' then 0 else 1 end, date desc
...