[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. SUM関数を使用して累計を求める (さらに…)…
  2. いまの時代、一つの企業に就職してそこで定年を迎えるというのはまれです。 しかし、それが一番いいと私…
  3. あいまい検索での否定 ○○以外の書き方 あいまい検索での否定は「[^任意の文字・文字列]…
  4. Oracle 12cではCDBとPDBの概念があるため、それより前のバージョンの様にログインすると、…
  5. コンボボックスで「全て」が選択された場合に、NULLの行も取得したい場合。 (さらに&helli…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る