値がNULLでない列がある場合に、その列の値を用いてソートしたい
質問: 値がある場合には別の列の値を優先してソート条件にしたい
以下のテーブルがあるのですが、
shipment_date の値でソートしたいです。ただし、
reshipment_date に値がある場合は
reshipment_dateの値を利用したいです。
どのようなSQLを記述すればよいでしょうか?
| id | product | price | shipment_date | reshipment_date |
| 1 | ぺんぎんクッキー | 185 | 2025-08-03 00:00:00 | 2025-10-12 00:00:00 |
| 2 | らくだキャラメル | 85 | 2025-09-02 00:00:00 | NULL |
| 3 | くじらケーキ | 220 | 2025-09-04 00:00:00 | 2025-12-21 00:00:00 |
| 4 | しろくまアイス | 285 | 2025-11-25 00:00:00 | NULL |
| 5 | かるがもサブレ | 125 | 2025-02-07 00:00:00 | 2025-08-06 00:00:00 |
| 6 | かぴばらタルト | 160 | 2025-05-25 00:00:00 | NULL |
方針
値がNULLでない列がある場合に、その列の値を用いてソートする場合には、COALESCE 関数を利用するとシンプルに記述できます。
COALESCE関数の書式
COALESCE関数の書式は次の通りです。
COALESCE ( 列名1, 列名2, ... 列名n )
COALESCE ( 変数1, 変数2, ... 変数n )
COALESCE関数の動作
COALESCE 関数は最初のNULLでない値を返します。
シンプルな例
例1
以下のSQLの場合、4が結果となりjます。
select COALESCE (NULL, NULL, 4, 7, NULL)
例2
以下のSQLの場合、45が結果となりjます。
declare @val1 int = NULL
declare @val2 int = 45
declare @val3 int = 22
select COALESCE (@val1, @val2, @val3)
値がNULLでない列がある場合に、その列の値を用いてソートする場合
以下のテーブルにおいて、shipment_date でソートするが、reshipment_date の値がある場合には、reshipment_dateの値を利用してソートする場合、
次のSSL文となります。
Products テーブル
| id | product | price | shipment_date | reshipment_date |
| 1 | ぺんぎんクッキー | 185 | 2025-08-03 00:00:00 | 2025-10-12 00:00:00 |
| 2 | らくだキャラメル | 85 | 2025-09-02 00:00:00 | NULL |
| 3 | くじらケーキ | 220 | 2025-09-04 00:00:00 | 2025-12-21 00:00:00 |
| 4 | しろくまアイス | 285 | 2025-11-25 00:00:00 | NULL |
| 5 | かるがもサブレ | 125 | 2025-02-07 00:00:00 | 2025-08-06 00:00:00 |
| 6 | かぴばらタルト | 160 | 2025-05-25 00:00:00 | NULL |
select * FROM PRODUCTS ORDER BY COALESCE (reshipment_date, shipment_date)
結果は以下になります。reshipment_date が設定されているレコードは reshipment_dateの値でソートできています。
| id | product | price | shipment_date | reshipment_date |
| 6 | かぴばらタルト | 160 | 2025-05-25 00:00:00 | NULL |
| 5 | かるがもサブレ | 125 | 2025-02-07 00:00:00 | 2025-08-06 00:00:00 |
| 2 | らくだキャラメル | 85 | 2025-09-02 00:00:00 | NULL |
| 1 | ぺんぎんクッキー | 185 | 2025-08-03 00:00:00 | 2025-10-12 00:00:00 |
| 4 | しろくまアイス | 285 | 2025-11-25 00:00:00 | NULL |
| 3 | くじらケーキ | 220 | 2025-09-04 00:00:00 | 2025-12-21 00:00:00 |
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。