J'ai une colonne de date qui a un NULL
. Je veux commander par la colonne de date ASC, mais j'ai besoin que les NULL
soient en bas. Comment le faire sur TSQL ?
En SQL standard, vous pouvez spécifier où placer les valeurs nulles:
order by col asc nulls first
order by col asc nulls last
order by col desc nulls first
order by col desc nulls last
mais T-SQL ne respecte pas la norme ici. L'ordre des valeurs NULL varie selon que vous triez par ordre croissant ou décroissant dans T-SQL:
order by col asc -- implies nulls first
order by col desc -- implies nulls last
Avec des entiers, vous pouvez simplement trier par les négatifs:
order by -col asc -- sorts by +col desc, implies nulls first
order by -col desc -- sorts by +col asc, implies nulls last
Mais ce n'est pas possible avec des dates (ou des chaînes d'ailleurs), vous devez donc d'abord trier par est nul/n'est pas nul et seulement ensuite par votre colonne:
order by case when col is null then 1 else 2 end, col asc|desc -- i.e. nulls first
order by case when col is null then 2 else 1 end, col asc|desc -- i.e. nulls last
Select *
From YourTable
Order By case when DateCol is null then 0 else 1 end
,DateCol
Ou même Order By IsNull(DateCol,'2525-12-31')
order by case when col_name is null then 1 else 2 end, col_name asc
a fait l'affaire sur Oracle. Cependant, la même chose sur MS SQL Server pousse les enregistrements NULL vers le bas en laissant non null au sommet du jeu de résultats.