order by で NULL のレコードを末尾にするには IIF か CASE WHEN を使用します。
NULL のレコードを末尾に
ORACLEのようにNULL時のソート順指定はできません。「IIF」 または 「CASE WHEN」 で 「NULLではないときは 0, NULLのときは 1」に変換し、ソートをします。IIF を使用
SELECT * FROM [テーブル名]
ORDER BY IIF([ソートするカラム名] IS NOT NULL, 0, 1),
[ソートするカラム名];
- 2行目: IIF を使用し、 NULLではないときは 0, NULLのときは 1 にしています。
CASE WHEN を使用
SELECT * FROM [テーブル名]
ORDER BY (CASE WHEN [ソートするカラム名] IS NOT NULL THEN 0 ELSE 1 END),
[ソートするカラム名];
- 2行目: CASE WHEN を使用し、 NULLではないときは 0, NULLのときは 1 にしています。
「SampleTable テーブル」の「Point カラム」でソートしています。通常は Point が NULL のレコードが先頭に並びますが、末尾になります。
SELECT * FROM [SampleTable]
ORDER BY IIF([Point] IS NOT NULL, 0, 1),
[Point],
[UserName];
SELECT * FROM [SampleTable]
ORDER BY (CASE WHEN [Point] IS NOT NULL THEN 0 ELSE 1 END),
[Point],
[UserName];
何もせずソートした場合
NULL のレコードが先頭に並びます。SELECT * FROM [SampleTable]
ORDER BY [Point],
[UserName];
検証環境
- Microsoft SQL Server 2019 (RTM-CU10) (KB5001090) - 15.0.4123.1 (X64) Mar 22 2021 18:10:24 Copyright (C) 2019 Microsoft Corporation Express Edition (64-bit) on Linux (Ubuntu 20.04.2 LTS) <X64>
- Docker image: mcr.microsoft.com/mssql/server:2019-latest
- Docker Desktop 3.3.1(63152)
- Docker Engine 20.10.5
- Microsoft SQL Server Management Studio v18.8(15.0.18369.0)
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.928 Experience: Windows Feature Experience Pack 120.2212.551.0