У меня есть столбец даты, у которого есть NULL
. Я хочу заказать по столбцу даты ASC, но мне нужно, чтобы NULL
был внизу. Как это сделать на TSQL?
TSQL ORDER BY с нулями сначала или последним (внизу или сверху)
Ответ 1
В стандартном SQL вы можете указать, куда положить nulls:
order by col asc nulls first
order by col asc nulls last
order by col desc nulls first
order by col desc nulls last
но T-SQL не соответствует стандарту здесь. Порядок NULL зависит от того, сортируете ли вы восходящий или нисходящий в T-SQL:
order by col asc -- implies nulls first
order by col desc -- implies nulls last
С целыми числами вы можете просто сортировать по негативам:
order by -col asc -- sorts by +col desc, implies nulls first
order by -col desc -- sorts by +col asc, implies nulls last
Но это невозможно с датами (или строками, если на то пошло), поэтому вы должны сначала отсортировать по null или не null, а только по столбцу:
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
Ответ 2
Select *
From YourTable
Order By case when DateCol is null then 0 else 1 end
,DateCol
Или даже Order By IsNull(DateCol,'2525-12-31')
Ответ 3
order by case when col_name is null then 1 else 2 end, col_name asc
добился успеха в Oracle. Однако то же самое на MS SQL Server сдвигает NULL-записи вниз, оставляя ненулевое значение в верхней части результирующего набора.