検索した結果に対して条件分岐処理を入れて、表示を変えたい場合にはCASE~WHEN句を使用します。
構文
CASE~WHEN構文は、①値で分岐するパターンと②条件で分岐するパターンがあります。
- ① 値で分岐するパターン
- CASE <値> WHEN <比較値1> THEN <結果1> WHEN <比較値2> THEN <結果2> ELSE <結果その他> END
- ② 条件で分岐するパターン
- CASE WHEN <条件1> THEN <結果1> WHEN <条件2> THEN <結果2> ELSE <結果その他> END
①の書き方は、1つの値と比較値の単純な比較の場合に適しています。
②の書き方は、書き方1では書ききれないような単純な比較ではない場合に使用します。
サンプルソース
以下のテーブルをサンプルとします。
CD | NAME | DEPT | SCORE |
---|---|---|---|
001 | 田中 | 10 | 38 |
002 | 山本 | 20 | 92 |
003 | 篠原 | 10 | 75 |
004 | 米山 | 99 | 63 |
005 | 藤田 | 30 | 49 |
例)dept値を分岐して名称に変換して表示する
1 2 3 4 5 6 7 8 9 10 11 |
SELECT cd ,name ,CASE dept WHEN '10' THEN '営業部' WHEN '20' THEN '開発部' WHEN '30' THEN '総務部' ELSE 'その他' END AS dept FROM tbl_syain; |
- 結果
- CD NAME DEPT ---- ------ -------- 001 田中 営業部 002 山本 開発部 003 篠原 営業部 004 米山 その他 005 藤田 総務部
例)score値によって結果を表示する
1 2 3 4 5 6 7 8 9 10 |
SELECT cd ,name ,CASE WHEN score >= 50 AND score < 80 THEN '補習' WHEN score >= 80 THEN '合格' ELSE '不合格' END FROM tbl_syain; |
- 結果
- CD NAME DEPT ---- ------ -------- 001 田中 不合格 002 山本 合格 003 篠原 補習 004 米山 補習 005 藤田 不合格
メモ
- DECODE関数でも同様のことができます。