NULL
を含む日付列があります。日付列ASCで並べ替えたいのですが、NULL
sが一番下にある必要があります。 [〜#〜] tsql [〜#〜]?でそれを行う方法
標準SQLでは、nullを配置する場所を指定できます。
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
_Select *
From YourTable
Order By case when DateCol is null then 0 else 1 end
,DateCol
_
またはOrder By IsNull(DateCol,'2525-12-31')
order by case when col_name is null then 1 else 2 end, col_name asc
Oracleでトリックを行いました。ただし、MS SQL Serverでも同じであるため、NULLレコードがプッシュダウンされ、NULL以外が結果セットの先頭に残ります。