CASE WHENを使ってSQLでIF文を使わずに条件を分岐する

公開日: : 最終更新日:2016/07/18 SQL Server , , , ,

SQLでIFを使わずに条件分岐する

SQLでIFを書けばWHERE句の内容を変えて検索できますが、条件ごとに同じようなSQLを
複数回書くのは面倒なので、1行で分岐できないかと言う事でSQLを作って見ました。

方法はWHERE句の条件にCASE WHENを使用して、条件分岐を行います。

1.テーブルとデータの準備

まずはテーブルとその検索用データを以下のSQLで作成します。
<<テーブル>>

<<検索用データ>>


2.条件を分岐させて検索

今回は「社員番号」を指定せずに全件取得する場合と「社員番号」を指定して1件のみに
絞り込んだものを1行のSQLで実行します。

まずは全件検索。

動作結果。

社員番号 氏名 部署
1 太郎さん 営業部
2 次郎さん 経理部
3 三郎さん 人事部
4 四郎さん 営業部
5 五郎さん 経理部
6 六郎さん 人事部
7 七郎さん 営業部
8 八郎さん 経理部
9 九郎さん 人事部

無事全件検索できました。

次に「社員番号」が「5」の人(1件に絞り込み)を取得します。

実行結果。

社員番号 氏名 部署
5 五郎さん 経理部

指定した「五郎さん」だけが取得できました。

3.解説

でCASE WHEを使用することで「条件が指定されてない(@検索社員番号がNULL)」の場合は
テーブルの値をそのまま使用し、「条件が指定された(@検索社員番号がNULL以外)の場合は
その指定された値で検索します。

これでIF文を書くことなく、条件を分岐させることができるようになります。
SQLを書く量を少なくすることができます。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 14 follow us in feedly

関連記事

SQLServer

SQLServerでクライアントのIPアドレスを取得する

SQLServerでクライアントのIPアドレスを取得する SQLを発行したクライアントのIPアドレ

記事を読む

a0001_013635

呼び出したストアドプロシジャーの戻り値を使用する

呼び出したストアドプロシジャーの戻り値を使用する 処理の構成上、ストアドプロシジャーから他のストア

記事を読む

a0001_013635

SQLで改行コードを含む項目を取得する

SQLで改行コードを含む項目を検索する Microsoft SQL Server Managemn

記事を読む

no-img

SELECT INTOで既存テーブルのデータを新規テーブルにコピーする

既存テーブルのデータを新規テーブルにコピーします。 簡単だが結構忘れるのでメモします。

記事を読む

no-img

テーブルにユニークインデックス(UNIQUE INDEX)を作成する

テーブルにユニークインデックス(UNIQUE INDEX)を作成 すでに作成したテーブルにユニ

記事を読む

no-img

DATENAME関数を使って日付を取得する。

DATENAME関数を使って日付取得 SQLServerでDATENAME関数を使って日付を取得し

記事を読む

no-img

SELECTした結果をランダムに並び変える

SQLでSELECTした結果をランダムに並び変えて表示する SQLServerでSELECTした結

記事を読む

a0001_013635

SQLServerのテーブルやカラムにコメントをつける方法

SQLServerでテーブルやカラムにコメントをつける SQLServerで作成したテーブルやカラ

記事を読む

SQLServer

SQLServerで引数の順序を考慮せずに呼び出せるストアドプロシジャを作る

引数の順序を考慮せずに呼び出せるストアドプロシジャ ストアドプロシジャを呼び出す際に、引数が多いも

記事を読む

no-img

SQLServerのSQL_VARIANT_PROPERTYを使ってカラムの基本データ型を取得する

このページはSQL_VARIANT_PROPERTYを使ってカラムの基本データ型を取得すると重複して

記事を読む

no-img
SQLServerで作ったテンポラリテーブルが見つからず無効になってしまう

SQLServerでテンポラリテーブルを利用して処理を行う時に 「オ

no-img
TOP句で変数を使ってSQLを1行にする

TOP句で変数を使ってSQLを1行にする TOP句を使って複雑なSQ

a0001_013635
SQLで文字列を反転させる

SQLで文字列を反転させる SQLで文字列を"012345"を後ろか

no-img
SQLServerでSQLを使ってテーブルのカラム名(項目名)を取得する

SQLでテーブルのカラム名(項目名)を取得 Oracleでは

no-img
DEFAULT制約付きのカラムの属性を変更する

DEFAULT制約付きのカラムの属性を変更する SQLServerで

→もっと見る



PAGE TOP ↑