SELECT文で取得した結果に対して、CASE式を使用することで条件判定が可能です。
条件判定を行うことで、SQL文の出力結果を変えることができます。
プログラムのIF文の判定をSQL文の中で行っているようなイメージであり、プログラムを作るまでもない運用作業で使用する他、プログラムに組み込む場合も使い方次第でプログラムの可読性・保守性を高めることができる場合があります。
なお、NULLの時に出力結果を変えるだけであればCOALESCE関数の方がスマートなので、これも併せて紹介します。
【文法】
・CASE式(単純CASE式)
SELECT~FROMの間のカラム指定の箇所で使用する。
カラムの値に応じて返す値を指定する。
1 2 3 4 5 6 7 |
CASE カラム WHEN 値 THEN 値 : : : ELSE 値 END |
・CASE式(検索CASE式)
SELECT~FROMの間のカラム指定の箇所で使用する。
式に応じて返す値を指定する。
1 2 3 4 5 6 7 |
CASE WHEN 式 THEN 値 : : : ELSE 値 END |
・COALESCE関数
SELECT~FROMの間のカラム指定の箇所で使用する。
可変長の引数を持ち、NULLではない最初の値を返す。
1 |
COALESCE(値,値…) |
【対象テーブル例】
・商品
1 2 3 4 5 6 7 8 |
+--------+--------+--------+----------+----------+ | 商品ID | 商品名 | 在庫数 | 現在売値 | 標準売値 | +--------+--------+--------+----------+----------+ | 1 | 商品1 | 60 | 100 | 100 | | 2 | 商品2 | 60 | 200 | 250 | | 3 | 商品3 | 15 | 300 | NULL | | 4 | 商品4 | 0 | 400 | 350 | +--------+--------+--------+----------+----------+ |
【取得例】
※ASは省略可能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 2 3 4 5 6 7 8 |
+--------+----------+------------+----------+ | 商品名 | 在庫状況 | 価格戦略 | 適正価格 | +--------+----------+------------+----------+ | 商品1 | 在庫有 | 適正価格 | 100 | | 商品2 | 在庫有 | 値下げ品 | 250 | | 商品3 | 在庫有 | 一時品 | 300 | | 商品4 | 品切れ | 便乗値上げ | 350 | +--------+----------+------------+----------+ |
いかがでしたでしょうか。
今回紹介した文法も、日々の保守運用作業の役に立つものです。
WHERE句以外の箇所でも条件を指定できることを知ると、SQLでの表現の幅が広がり、作業が効率的になります。
SELECT文の結果については、結果として表示される値を変えるだけでなく、その値の重複を排除したり、集計したりすることもできます。
こちらについては次回の記事で紹介したいと思います!
コメント