[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. EXECUTE 権限がオブジェクト '関数名'、データベース 'データベース名'、スキーマ 'dbo…
  2. 開始日と終了日にブランクを設定した場合の記述にも対応 (さらに…)…
  3. SUM関数を使用して累計を求める (さらに…)…
  4. C#でSQL Serverから値を取得するには、System.Data.SqlClientクラスを使…
  5. リモートデスクトップ接続のサーバーで、スタートメニューが反応しなくなった場合 (さらに&hell…

カテゴリー

[スポンサードリンク]




ページ上部へ戻る