【SQL Server】CASE 使い方
CASE 式とは
CASE 式 は WHEN で条件を指定して上から順番にチェックしていき、最初に TRUE となる条件の結果を返します。
どの条件とも合致しない場合、
- ELSE が指定されている場合は ELSE の結果を返します。
- ELSE が指定されていない場合は NULL を返します
書き方
書き方は単純CASE 式と検索CASE 式の2通りの書き方があります。
今から覚えるって人は、まず、検索CASE式を覚えましょう。
理由は単純に条件式が書きやすくて、読みやすいからです。
単純CASE式だと下記の例のように単純な条件であれば、良いのですが、複数の条件を書くと途端に読みにくくなります。
あと、経験上ですが、検索CASE式で書いてあるクエリの方が多い気がします。
実行例
--テーブルの準備 CREATE TABLE 食べ物 ( Id int identity(1, 1) ,名前 varchar(20) ,種類 varchar(20) ); --データの準備 INSERT INTO 食べ物 VALUES ('りんご', '果物' ), ('みかん', '' ), ('ピーマン', '野菜' ), ('パン', NULL ) SELECT *, ----------------------- -- 単純 CASE 式 CASE 種類 WHEN '果物' THEN '美味しい' WHEN '野菜' THEN 'まずい' ELSE 'その他' END AS 単純CASE式, ----------------------- -- 検索 CASE 式 CASE WHEN 種類 = '果物' THEN '美味しい' WHEN 種類 = '野菜' THEN 'まずい' ELSE 'その他' END AS 検索CASE式 FROM 食べ物 DROP TABLE 食べ物
Id | 名前 | 種類 | 単純CASE式 | 検索CASE式 |
1 | りんご | 果物 | 美味しい | 美味しい |
2 | みかん | その他 | その他 | |
3 | ピーマン | 野菜 | まずい | まずい |
4 | パン | NULL | その他 | その他 |
CASE式のネスト
CASE式はネストしてさらに条件分岐させることが、可能ですが、最大ネスト数があって10階層まで可能です。それ以上ネストするとエラーになります。
これは、エラーになる例です。10までで止めておくとエラーになりません。
SELECT CASE WHEN 1 = 1 THEN CASE WHEN 2 = 2 THEN CASE WHEN 3 = 3 THEN CASE WHEN 4 = 4 THEN CASE WHEN 5 = 5 THEN CASE WHEN 6 = 6 THEN CASE WHEN 7 = 7 THEN CASE WHEN 8 = 8 THEN CASE WHEN 9 = 9 THEN CASE WHEN 10 = 10 THEN CASE WHEN 11 = 11 THEN 11 END END END END END END END END END END END
コメント