[SQL Server]歯抜けなしの日付のデータを取得したい

[スポンサードリンク]

指定した期間の売上データを取得する。ただし日付は連続していること。

要件

仕様
売上テーブルと、商品マスタの二つのテーブルがあり、下図の内容である。
7月は3日、5日、7日に商品を売り上げている。

上が商品マスタで、下が売上テーブルの内容である。

これを、マトリクス表に表示したい。

出力イメージ

画面定義

画面はこのような定義となっている。
※SSRSのマトリクス表を使用して説明する。

基礎となるSQL

通常はこのようなSQLを書く。

しかしこれだと、結果には3日、5日、7日のデータしか表示されない。

解決法

マトリクス列に7月1日~7月10日までを表示させる方法。

日付テーブルと品目テーブルを作成

下図のような結果を出す日付テーブルと品目テーブルを用意する。

日付テーブルの作り方は、
[SQL Server]CTE式の再帰呼び出しを利用して日付テーブルを作成する
を参考にすること。

この日付テーブルと後述する品目日付テーブルを「WHILE」ループで作ろうとすると、パフォーマンスが遅くなるので、ループで作ることはしないこと。

品目テーブルは、商品CDと商品名を、売上テーブルから取得する。
売上テーブルに存在する商品のみで、マトリクス表に出力したいからである。
この品目テーブルはDISTINCT句で重複を除いておく。


この品目テーブルと、日付テーブルを交差結合(CROSS JOIN)して、「品目日付テーブル」を作る

品目日付テーブルに数量を結合する

下図が品目日付テーブルに数量を結合したものである。

ソースコードと出力結果

この解決法のソースコードと出力結果はこうなる。
売上がない日は数量は「NULL」として、レコードを作成するため、表示データ上は消えない。

ソースコード

出力結果

[スポンサードリンク]

関連記事

コメント

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

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

CAPTCHA


ピックアップ記事

  1. C言語のprintf関数でよく用いられるエスケープシーケンスを表すバックスラッシュ「\」の入力方法は…
  2. SSRSのパラメータ入力エリアが、英語表記になった場合の対策。 (さらに…)…
  3. 割り算に必須な0除算回避 (さらに…)…
  4. 例えば、あなたが中途採用で企業の求人に応募した際の話。 (さらに…)…
  5. Oracle 12cではCDBとPDBの概念があるため、それより前のバージョンの様にログインすると、…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る