Если ваш двигатель позволяет ORDER BY x IS NULL, x
или ORDER BY x NULLS LAST
использовать это. Но если это не так, это может помочь:
Если вы сортируете по числовому типу, вы можете сделать это: (Заимствование схемы из другого ответа .)
SELECT *
FROM Employees
ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;
Любое ненулевое число становится 0, а нули становятся 1, что означает, что сортировка нуля выполняется в последнюю очередь.
Вы также можете сделать это для строк:
SELECT *
FROM Employees
ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName
Потому что 'a'
> ''
.
Это даже работает с датами, приводя к обнуляемому int и используя метод для целых чисел выше:
SELECT *
FROM Employees
ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate
(Давайте представим, что схема имеет HireDate.)
Эти методы позволяют избежать необходимости придумывать или управлять «максимальным» значением каждого типа или исправлять запросы, если тип данных (и максимальный) изменяется (обе проблемы, с которыми сталкиваются другие решения ISNULL). Плюс они намного короче чем ДЕЛО.