SQL Server

【SQL Server】SQL文の中で条件分岐させる2つの方法

SQLの文法
記事内に商品プロモーションを含む場合があります

条件を記述する命令としていずれの言語でも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文で書いておいた方が後々困ることがないように思います。

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。