条件を記述する命令としていずれの言語でもIF文がありますが、SQL Serverでは以前はIF文が使えませんでした。
当時は条件分岐させるにはCASE文を使うしかなかったのですが今現在はCASE文を使う方法とIF文を使う方法を選択することができます。
IF文を使うかCASE WHEN文を使うか
他の言語の場合、分岐条件が多ければCASE WHEN文、少なければIF文という使い分けが一般的です。
SQL ServerではSQLServer2012からIF文(構文としてはIIF)が使えるようになったわけですが、他のSQL言語ではIIF文は使えません。
このため、他のDBと合わせる必要がある場合(載せ替える予定がある場合など)は迷わずCASE WHEN文を選択しましょう。
IIF文の使い方
基本の構文
IIF(【条件式】,【Trueの戻り値】, 【Falsの戻り値】)
パラメータは、条件、Trueの場合の戻り値、Falseの場合の戻り値の3つです。
今回は点数が60点以上を合格、60点未満を不合格と返す命令をサンプルとします。
条件式 | 点数>=60 |
---|---|
Trueの戻り値 | 合格 |
Falseの戻り値 | 不合格 |
SELECT IIF(点数>=60, ‘合格’, ‘不合格’) FROM テスト結果TBL
条件が増えればIIFをネストして記述すること可能です。
SELECT IIF(点数>=60, ‘合格’, IIF(点数>=30,’赤点’, ‘青点’)) FROM テスト結果TBL
このサンプルでは60点以上が【合格】、30点以上60点未満が【赤点】、30点未満は【青点】を返します。
※どこかの学校の点数評価ですね(笑)
CASE文の使い方
基本の構文
CASE WHEN 【条件】 THEN 【Trueの戻り値】 ELSE 【Falseの戻り値】 END
IIF文と同じく点数が60点以上を合格、60点未満を不合格と返す命令をサンプルとして紹介します。
SELECT CASE WHEN 点数 >= 60 THEN ‘合格’ ELSE ‘不合格’ END FROM テスト結果TBL;
CASE文なので条件が増えればWHEN句を追記していきます。
SELECT
CASE
WHEN 点数 >= 60 THEN ‘合格’
WHEN 点数 >= 30 THEN ‘赤点’
ELSE ‘青点’
END;
まとめ
SQL ServerのSELECT文内で処理を分岐する方法として、IFとCASE WHENをご紹介しました。
元々SQL ServerではIF文は使えませんでしたが、Ver2012からIIF文として利用できるようになりました。
逆に言えば、Ver2012より前の場合は使えませんし他のDBMSのSQL構文との互換性もありません。
条件が少ない場合IF文の方が使いやすいとは思いますが、CASE文で代替できる処理はCASE文で書いておいた方が後々困ることがないように思います。