La respuesta rápida es la siguiente: la mejor solución para cambiar el orden de los valores nulos en los casos necesarios es el aceptado.Sin embargo, sólo tiene que usarlo, o una variación de la misma en los casos necesarios:
DESC + NULLS PRIMERO:
ORDER BY (CASE WHEN [Order] IS NULL THEN 0 ELSE 1 END), [Order] DESC
ASC + NULLS ÚLTIMO:
ORDER BY (CASE WHEN [Order] IS NULL THEN 1 ELSE 0 END), [Order] ASC
ASC + NULLS PRIMERO: funciona bien de forma predeterminada
DESC + NULLS Últimos: Funciona bien por defecto
Veamos por qué:
Si marca la ORDER BY Clause (Transact-SQL) MSDN docs, y baje hasta ASC | DESC
, se puede leer lo siguiente:
ASC | DESC
Especifica que los valores en la columna especificada se deben ordenar en orden ascendente o descendente. ASC ordena desde el valor más bajo hasta el valor más alto. DESC ordena desde el valor más alto al valor más bajo. ASC es el orden de clasificación predeterminado. Los valores nulos se tratan como los valores más bajos posibles.
De manera predeterminada, si especifica el orden ASC
, funciona como NULLS FIRST
. Y, si especifica DESC
, funciona como NULLS LAST
.
lo que sólo tendrá que hacer para cambiar el comportamiento NULLS FIRST
en DESC
orden, y para NULLS LAST
en ASC
orden.
En mi humilde opinión, la mejor solución para cambiar el orden de nulos en los casos necesarios es la aceptada, pero la he incluido adaptada a los diferentes casos al principio de mi respuesta.
Posible duplicado de http://stackoverflow.com/questions/821798/order-by-date-showing-nulls-first-then-most-recent-dates –