Si votre moteur le permet ORDER BY x IS NULL, x
ou l' ORDER BY x NULLS LAST
utilise. Mais si ce n'est pas le cas, cela pourrait aider:
Si vous triez par type numérique, vous pouvez le faire: (Emprunter le schéma d' une autre réponse .)
SELECT *
FROM Employees
ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;
Tout nombre non nul devient 0 et les valeurs nulles deviennent 1, ce qui trie les valeurs nulles en dernier.
Vous pouvez également le faire pour les chaînes:
SELECT *
FROM Employees
ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName
Parce que 'a'
> ''
.
Cela fonctionne même avec les dates en contraignant à un entier nullable et en utilisant la méthode pour les entiers ci-dessus:
SELECT *
FROM Employees
ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate
(Supposons que le schéma a HireDate.)
Ces méthodes évitent d'avoir à trouver ou à gérer une valeur "maximale" de chaque type ou à corriger les requêtes si le type de données (et le maximum) change (deux problèmes dont souffrent les autres solutions ISNULL). De plus, ils sont beaucoup plus courts qu'un CASE.