Jeśli Twój silnik na to pozwala ORDER BY x IS NULL, x
lub ORDER BY x NULLS LAST
użyj tego. Ale jeśli to nie pomoże, mogą pomóc:
Jeśli sortujesz według typu numerycznego, możesz to zrobić: (Pożyczanie schematu z innej odpowiedzi ).
SELECT *
FROM Employees
ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;
Każda liczba inna niż null staje się 0, a null staje się 1, co sortuje null na końcu.
Możesz to również zrobić dla ciągów:
SELECT *
FROM Employees
ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName
Ponieważ 'a'
> ''
.
Działa to nawet z datami poprzez wymuszenie na zerową wartość int i użycie metody dla wartości int powyżej:
SELECT *
FROM Employees
ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate
(Pozwala udawać, że schemat ma HireDate).
Metody te pozwalają uniknąć konieczności wymyślania lub zarządzania wartością „maksymalną” każdego typu lub naprawiania zapytań, jeśli typ danych (i maksimum) ulegną zmianie (oba problemy dotyczą innych rozwiązań ISNULL). Plus są znacznie krótsze niż CASE.