Se il tuo motore lo consente ORDER BY x IS NULL, x
o ORDER BY x NULLS LAST
utilizzalo. Ma in caso contrario questi potrebbero aiutare:
Se stai ordinando per tipo numerico puoi farlo: (Prendendo in prestito lo schema da un'altra risposta .)
SELECT *
FROM Employees
ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;
Qualsiasi numero non nullo diventa 0 e i valori null diventano 1, che ordina i valori nulli per ultimi.
Puoi anche farlo per le stringhe:
SELECT *
FROM Employees
ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName
Perché 'a'
> ''
.
Funziona anche con le date convertendo in un int nullable e usando il metodo per gli ints sopra:
SELECT *
FROM Employees
ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate
(Facciamo finta che lo schema abbia HireDate.)
Questi metodi evitano il problema di dover inventare o gestire un valore "massimo" di ogni tipo o correggere le query se il tipo di dati (e il massimo) cambia (entrambi i problemi che subiscono altre soluzioni ISNULL). Inoltre sono molto più brevi di un CASO.