■書式
Case文には単純Case式と検索Case式がある。
単純Case式のほうが簡潔に書けるが、できることも限られている。
単純Case式で書ける条件は検索Case式でも書くことができる
以下のCASE式はどちらも同じ結果が出る
--単純CASE式 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE 'その他' END --検索CASE式 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THNE '女' ELSE 'その他' END
■CASE式の注意点
①CASE式の評価は真になるWHEN句が見つかった時点で打ち切られて
残りのWHEN句は無視されるため、そのことを意識してコーディングする必要がある
--(例)以下のコードでは結果には「2番」が現れない CASE WHEN col_1 IN('a','b') THEN '1番' WHEN col_2 IN('a') THEN '2番’ ELSE ’その他' END
②各分岐が返すデータ型を統一する
③ENDの書き忘れに注意する
④ELSE句は必ず記述する
ENDと違い、ELSE句はオプションのため記述しなくてもエラーにはならない。
しかし、記述しない場合は暗黙に「ELSE NULL」の扱いになるため、
エラーにならなくても結果が違うバグの温床になるため、NULLで構わない場合であっても
明示的にELSE句を記述する癖をつけること。
■サンプルコード①
SELECT CONCAT(l_name,f_name) AS 氏名 ,class AS 役職 ,CASE WHEN class IN ('部長','課長') THEN '管理職' WHEN class IN ('主任','担当') THEN '総合職' ELSE '一般職' END AS 役職クラス FROM employee ;
出力結果
■サンプルコード②
SELECT name AS 氏名 ,CASE answer1 WHEN 3 THEN 'ためになった' WHEN 2 THEN '普通' WHEN 1 THEN '役に立たない' ELSE '' END AS 評価 ,answer2 AS 感想 ,FORMAT(answered,'yyyy年MM月dd日') AS 回答日時 FROM quest ORDER BY answered DESC ;
出力結果
SELECT author_id AS 著者名 ,COUNT(isbn) AS カウント数 ,CASE WHEN COUNT(*) >= 4 THEN '多い' WHEN COUNT(*) >= 2 THEN '普通' ELSE '少ない' END AS 評価 FROM author_books GROUP BY author_id ;
出力結果