Быстрый ответ таков: лучшим решением для изменения порядка нуля в необходимых случаях является принятое. Но вам нужно только использовать его или его вариант в необходимых случаях:
DESC + NULLS FIRST:
ORDER BY (CASE WHEN [Order] IS NULL THEN 0 ELSE 1 END), [Order] DESC
ASC + NULLS LAST:
ORDER BY (CASE WHEN [Order] IS NULL THEN 1 ELSE 0 END), [Order] ASC
ASC + NULLS FIRST: по умолчанию работает нормально
DESC + NULLS LAST: по умолчанию работает нормально
Посмотрим, почему:
Если вы проверите документ ORDER BY (Transact-SQL) MSDN docs и прокрутите вниз до ASC | DESC
, вы можете прочитать это:
ASC | DESC
Указывает, что значения в указанном столбце должны быть отсортированы в порядке возрастания или убывания. ASC сортирует от самого низкого значения до самого высокого значения. DESC сортирует от самого высокого значения до самого низкого значения. ASC - это порядок сортировки по умолчанию. Нулевые значения рассматриваются как минимально возможные значения.
Таким образом, по умолчанию, если вы укажете порядок ASC
, он будет работать как NULLS FIRST
. И, если вы укажете DESC
, он будет работать как NULLS LAST
.
Так что вам нужно только изменить поведение для NULLS FIRST
в DESC
порядке и для NULLS LAST
в ASC
порядке.
ИМХО, лучшее решение для изменения порядка нулей в необходимых случаях - это принятое, но я включил его, адаптированный к различным случаям, в начале моего ответа.