全件取得または値が0以外のレコードを取得する

[スポンサードリンク]

CASE文、ABS、LIKE演算子で実現する。

要件

パラメータにより、レコード全件を取得するか、値が0以外のレコードを取得する。
この場合、商品名と在庫数量の2つの列を持つテーブルで考えて見る。

パラメータの選択値により、
・「在庫数量が0以外の(在庫がある)商品」を取得
・全件取得
を切り替えたい。

これは、WHERE句に書く条件の演算子自体が変わるため、変数にSQLを入れて実行するか、下記の条件文で対応できる。

対応策

対応策としては、比較対象となる在庫数量を文字列に変換して、NOT LIKEで比較した。

数値項目が1つの場合

フラグが0(0を排除)

フラグが1(全件出力)

数値項目が複数の場合

例えば在庫数量という1つの数値項目だけでなく、複数の数値項目を判断する場合は、下記のようなソースになる。

この例では「商品名」「売上実績数量」「返品数量」の3カラムで、数値項目は2カラムである。

売上実績数量と返品数量を足したもので判断している。

フラグが0(0を排除)

フラグが1(全件出力)

しかし、この場合、仕様的に不具合となる場合もある。

「商品A」のように売上実績数100と、返品数が-100(マイナス値)相殺されて0になったものも出力しなくていい場合はこのソースでもよい。

※「返品数がマイナスっておかしくね?」という突っ込みは無視する、実際にそう表示する要件もある(例えば売上伝票の値と取消伝票の値も1行に一緒に出力する場合もある)

これが、「相殺されても、売上と返品は実際にあったので出力する」という要件だった場合。

売上数量と返品数量が両者純粋に「0」のもののみ除外しなければならない。

この場合は下記のようなソースになる。

フラグが0(0を排除)

フラグが1(全件出力)

これは、売上数量と返品数量の相殺を防ぐため、「ABS関数」で絶対値を求め足している。
これにより、マイナス値がなくなり、売上数量と返品数量の両者が純粋に0のものだけを排除できる。

[スポンサードリンク]

関連記事

コメント

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

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

CAPTCHA


ピックアップ記事

  1. ビューの作り方、ANSI_NULLS、QUOTED_IDENTIFIER、WITH(NOLOCK) …
  2. SQLServer SELECT文で連番を振る(項目ごとの連番・通し連番) (さらに&helli…
  3. SQLで月の末尾を求める方法。 (さらに…)…
  4. 無料動画セミナー・クラスメンバとインスタンスメンバ (さらに…)…
  5. コンボボックスで「全て」が選択された場合に、NULLの行も取得したい場合。 (さらに&helli…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る