web-dev-qa-db-ja.com

最初または最後にNULLが設定されたTSQL ORDER BY(下部または上部)

NULLを含む日付列があります。日付列ASCで並べ替えたいのですが、NULL sが一番下にある必要があります。 [〜#〜] tsql [〜#〜]?でそれを行う方法

20

標準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
44
_Select *
 From  YourTable
 Order By case when DateCol is null then 0 else 1 end
         ,DateCol
_

またはOrder By IsNull(DateCol,'2525-12-31')

8

order by case when col_name is null then 1 else 2 end, col_name asc Oracleでトリックを行いました。ただし、MS SQL Serverでも同じであるため、NULLレコードがプッシュダウンされ、NULL以外が結果セットの先頭に残ります。

1
Tez Kurmala