Si su motor lo permite ORDER BY x IS NULL, x
o lo ORDER BY x NULLS LAST
usa. Pero si no es así, esto podría ayudar:
Si está ordenando por un tipo numérico, puede hacer esto: (Tomar prestado el esquema de otra respuesta ).
SELECT *
FROM Employees
ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;
Cualquier número no nulo se convierte en 0 y los nulos se convierten en 1, lo que clasifica los nulos en último lugar.
También puede hacer esto para cadenas:
SELECT *
FROM Employees
ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName
Porque 'a'
> ''
.
Esto incluso funciona con fechas coaccionando a un int anulable y usando el método para las entradas anteriores:
SELECT *
FROM Employees
ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate
(Supongamos que el esquema tiene HireDate).
Estos métodos evitan el problema de tener que encontrar o administrar un valor "máximo" de cada tipo o solucionar consultas si el tipo de datos (y el máximo) cambia (ambos problemas que sufren otras soluciones ISNULL). Además, son mucho más cortos que un CASO.