[SQL Server]パラメータ値で抽出条件(値の有無)を切り替える

[スポンサードリンク]

例えば、商品の色が登録されているもの、登録されていないものなどを取得する場合

概要

以前の記事、「NULLと0または空文字を除外する」では、ある列の値がNULLや0、空文字でないレコードを取得する方法を記載した。

仕様により、検索条件のパラメータにより、「NULL、空文字を除外」したり、「NULL、空文字のみを抽出」するといった切り替えが必要な場合がある。

例えば、商品の色が登録されているものが欲しい、逆に商品の色が登録されていないものが欲しい。
配属先の決まった新人のデータが欲しい、逆に配属先の決まっていない新人のデータが欲しいなど。

検索条件は下図のような感じ。

これをVBや、C#などの言語上で行うなら、例をあげるとこのようなイメージになる。

あ、ちなみにifの中は
「if(blnColor)」とか「if(!blnColor)」とかは、私の場合実務ではあまり書きません。
実務では様々なレベルの技術者が半月後、数年後にソースコードを見ることになりますので、なるべく省略しないように書いてます。

SQLのみで行う場合

しかし、これをBIツール(例えばSSRSなど)で行う場合、SQLやストアドのみで行わなければならない。
この場合、TransactSQLで文字列変数にSQLを入れてIF条件分岐でSQLを作って実行する方法もあるが、
非常に面倒くさいため、LIKEでおこなう方が単純でおススメである。

9行目のパラメータ「@ColorBool」の値を「0」に設定すると色が設定されているレコードを取得する。

「’_%’」の意味は1文字以上の任意の文字列である。

「_」アンダーバーは、「何か1文字」という意味であるため、これだけでは2文字以上の値が格納されているとレコードを取得することができない。
ここで、「0文字以上」を表す「%」を後ろにくっつけると、列に「1文字以上」の値が入っているものを抽出する。

アンダーバーやパーセントなどのワイルドカードを使用しない場合は固定値を検索するので、色なしの場合は「”」普通に空文字を指定すれば良い。

ISNULLでNULLを空文字に変換しているので、NULLと空文字の両方を処理できる。

[スポンサードリンク]

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


ピックアップ記事

  1. 例えば、商品の色が登録されているもの、登録されていないものなどを取得する場合 (さらに&hell…
  2. リモートデスクトップ接続のサーバーで、スタートメニューが反応しなくなった場合 (さらに&hell…
  3. 例えば、あなたが中途採用で企業の求人に応募した際の話。 (さらに…)…
  4. SQLServer SELECT文で連番を振る(項目ごとの連番・通し連番) (さらに&helli…
  5. 画面のパラメータにより異なる検索条件や、異なるテーブルのデータを取得する際。 「UNION ALL…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る