全件取得または値が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. 割り算に必須な0除算回避 (さらに…)…
  2. MacにEclipseをインストールする方法のまとめ (さらに…)…
  3. いまの時代、一つの企業に就職してそこで定年を迎えるというのはまれです。 しかし、それが一番いいと私…
  4. 本記事ではXMLからSQLを取得し、SQLiteで実行する。プリペアードステートメントを使用する。 …
  5. SSRSのデータセットにクエリが貼り付けられない場合 (さらに…)…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る