SELECT文で取得した結果に対して、CASE式を使用することで条件判定が可能です。
条件判定を行うことで、SQL文の出力結果を変えることができます。
プログラムのIF文の判定をSQL文の中で行っているようなイメージであり、プログラムを作るまでもない作業で使用する他、プログラムに組み込む場合も使い方次第でプログラムの可読性・保守性を高めることができます。
なお、NULLの時に出力結果を変えるだけであればCOALESCE関数の方がスマートなので、これも併せて紹介します。
【文法】
- CASE式(単純CASE式)
SELECT~FROMの間のカラム指定の箇所で使用する。
カラムの値に応じて返す値を指定する。
CASE カラム
WHEN 値 THEN 値
:
:
:
ELSE 値
END
- CASE式(検索CASE式)
SELECT~FROMの間のカラム指定の箇所で使用する。
式に応じて返す値を指定する。
CASE
WHEN 式 THEN 値
:
:
:
ELSE 値
END
- COALESCE関数
SELECT~FROMの間のカラム指定の箇所で使用する。
可変長の引数を持ち、NULLではない最初の値を返す。
COALESCE(値,値…)
【対象テーブル例】
商品
+--------+--------+--------+----------+----------+
| 商品ID | 商品名 | 在庫数 | 現在売値 | 標準売値 |
+--------+--------+--------+----------+----------+
| 1 | 商品1 | 60 | 100 | 100 |
| 2 | 商品2 | 60 | 200 | 250 |
| 3 | 商品3 | 15 | 300 | NULL |
| 4 | 商品4 | 0 | 400 | 350 |
+--------+--------+--------+----------+----------+
【取得例】
※ASは省略可能
SELECT 商品名,
CASE 在庫数
WHEN 0 THEN '品切れ'
ELSE '在庫有'
END AS 在庫状況,
CASE
WHEN 標準売値 IS NULL THEN '一時品 '
WHEN 現在売値 = 標準売値 THEN '適正価格 '
WHEN 現在売値 < 標準売値 THEN '値下げ品 '
ELSE '便乗値上げ'
END AS 価格戦略,
COALESCE(標準売値,現在売値) AS 適正価格
FROM 商品
ORDER BY 商品ID;
↓
+--------+----------+------------+----------+
| 商品名 | 在庫状況 | 価格戦略 | 適正価格 |
+--------+----------+------------+----------+
| 商品1 | 在庫有 | 適正価格 | 100 |
| 商品2 | 在庫有 | 値下げ品 | 250 |
| 商品3 | 在庫有 | 一時品 | 300 |
| 商品4 | 品切れ | 便乗値上げ | 350 |
+--------+----------+------------+----------+
---------------------
目次