[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. SQL Server認証ができるようにする設定方法 (さらに…)…
  2. C#でSQL Serverから値を取得するには、System.Data.SqlClientクラスを使…
  3. コンボボックスで「全て」が選択された場合に、NULLの行も取得したい場合。 (さらに&helli…
  4. ビューの作り方、ANSI_NULLS、QUOTED_IDENTIFIER、WITH(NOLOCK) …
  5. dpiAwareの設定を変える。 (さらに…)…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る