CASE式をWHERE句で使う(SQL Server)


ITコーディネータのシュウです。

IMG_3316

お久しぶりです。写真は妻が買ってきて家に置いていたハイビスカスという花が綺麗に咲いたところを撮ったものです。ハイビスカスは花の色によって花言葉が違うようですね。白は「艶美」、ピンクは「華やか」、黄色は「輝き」、赤は「勇敢」とのこと。
家に花があるのはいいものですね。あまり花とかに興味がなかった私でしたが、妻のおかげで自然の美しさを意識することが多くなったと感謝しています。
一生懸命に咲いて美を表わそうとする花のように、私たちも情熱をもって一生懸命に生きていきたいものです。

それから、dbSheetClientのブログに、はるパパさんのdbSheetClient千夜一夜というブログができています。是非そちらもご覧ください。
https://www.newcom07.jp/dbsheetclient/dbsc-blog/

<本日の題材>
CASE式をWHERE句で使う(SQL Server

CASE WHENの式を、以前、SELECT文で使用するサンプルは何度かブログで取り上げましたが、WHERE句の中で、ケースによって条件文自体を変更したいという場合のやり方を今回試してみたいと思います。

例)
検索用の項目を設定し、そこに値を設定すれば、その項目に対しては指定した値で検索するが、何も設定しなければ、その項目に対しては条件を設定せずに抽出を行いたいというケースはよくあると思います。

今回は簡単なケースとして、社員マスタの検索の際に、「社員番号」「社員名」「拠点」の検索項目に対して、設定した内容があればその値で検索し、なければ条件としては加えないかたちの例を取り上げてみたいと思います。

上記の3項目をパラメータとして渡し、値が NULL でなければその値を条件とするが、NULLの場合には条件に加えないというかたちにします。

例えば、社員番号、社員名は何も値を設定せず、拠点を「ニューヨーク」として検索したい場合、以下のように設定できます。

-- 変数を定義
DECLARE
            @社員番号     DECIMAL(5),
            @社員名       NVARCHAR(20),
            @拠点         NVARCHAR(20);

--変数設定:画面で選択した値がセットされるようにします
SET @社員番号 = NULL;
SET @社員名 = NULL;
SET @拠点 = 'ニューヨーク' ;

--社員マスタ検索
SELECT * FROM dbo.社員マスタ
WHERE 1=1
AND 社員番号 = CASE WHEN @社員番号 IS NULL THEN 社員番号 ELSE @社員番号 END
AND 社員名 = CASE WHEN @社員名 IS NULL THEN 社員名 ELSE @社員名 END
AND 拠点 = CASE WHEN @拠点 IS NULL THEN 拠点 ELSE @拠点 END;

SQL1

上記は、拠点が「ニューヨーク」の社員を全て抽出してきます。
もちろん、社員名にも値を設定すれば2つの条件で抽出することになります。

SQL2

 結果は、2つの条件を満たすデータのみが抽出されることを確認できました。

今日は以上まで

にほんブログ村 IT技術ブログへ
にほんブログ村

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>