続き
現在のレポート出力用のクエリにこの情報を追加してやれば不要なページを出力しないようにできます
商品名 | f0 | f1 | f2 | n0 | n1 | n2 | G | → | 商品名 | f0 | f1 | f2 | n0 | n1 | n2 | Py | Px | P合計 |
あ | A店 | B店 | C店 | 1 | 1 | 1 | 0 | あ | A店 | B店 | C店 | 1 | 1 | 1 | 0 | 0 | 9 | |
い | A店 | B店 | C店 | 1 | 0 | い | A店 | B店 | C店 | 1 | 0 | 0 | 9 | |||||
う | A店 | B店 | C店 | 1 | 0 | う | A店 | B店 | C店 | 1 | 0 | 0 | 9 | |||||
え | A店 | B店 | C店 | 1 | 1 | 0 | え | A店 | B店 | C店 | 1 | 1 | 0 | 0 | 9 | |||
お | A店 | B店 | C店 | 1 | 1 | 0 | お | A店 | B店 | C店 | 1 | 1 | 0 | 0 | 9 | |||
か | A店 | B店 | C店 | 1 | 0 | か | A店 | B店 | C店 | 1 | 1 | 0 | 8 | |||||
き | A店 | B店 | C店 | 1 | 0 | き | A店 | B店 | C店 | 1 | 1 | 0 | 8 | |||||
く | A店 | B店 | C店 | 1 | 1 | 0 | く | A店 | B店 | C店 | 1 | 1 | 1 | 0 | 8 | |||
け | A店 | B店 | C店 | 1 | 1 | 0 | け | A店 | B店 | C店 | 1 | 1 | 1 | 0 | 8 | |||
こ | A店 | B店 | C店 | 1 | 1 | 0 | こ | A店 | B店 | C店 | 1 | 1 | 1 | 0 | 8 | |||
さ | A店 | B店 | C店 | 0 | さ | A店 | B店 | C店 | 2 | 0 | 0 | |||||||
し | A店 | B店 | C店 | 0 | し | A店 | B店 | C店 | 2 | 0 | 0 | |||||||
あ | D店 | E店 | 1 | 1 | 1 | あ | D店 | E店 | 1 | 1 | 0 | 1 | 4 | |||||
い | D店 | E店 | 1 | い | D店 | E店 | 0 | 1 | 4 | |||||||||
う | D店 | E店 | 1 | 1 | う | D店 | E店 | 1 | 0 | 1 | 4 | |||||||
え | D店 | E店 | 1 | 1 | え | D店 | E店 | 1 | 0 | 1 | 4 | |||||||
お | D店 | E店 | 1 | お | D店 | E店 | 0 | 1 | 4 | |||||||||
か | D店 | E店 | 1 | か | D店 | E店 | 1 | 1 | 0 | |||||||||
き | D店 | E店 | 1 | き | D店 | E店 | 1 | 1 | 0 | |||||||||
く | D店 | E店 | 1 | く | D店 | E店 | 1 | 1 | 0 | |||||||||
け | D店 | E店 | 1 | け | D店 | E店 | 1 | 1 | 0 | |||||||||
こ | D店 | E店 | 1 | こ | D店 | E店 | 1 | 1 | 0 | |||||||||
さ | D店 | E店 | 1 | 1 | さ | D店 | E店 | 1 | 2 | 1 | 2 | |||||||
し | D店 | E店 | 1 | 1 | し | D店 | E店 | 1 | 2 | 1 | 2 |
「Px(各ページの列のまとまり)」はすでに求めていますね。「Q出力店舗のG」です。Q出力店舗の「G」は「Px」に変更します
「Py」も同様に求められます
Q出力商品リスト
SELECT 商品名
FROM テーブルA
GROUP BY 商品名;
Q出力商品ページグループ
SELECT 商品名, DCount("*","Q出力商品リスト","商品名<'" & [商品名] & "'") AS [No], Int([No]/5) AS Py
FROM Q出力商品リスト;
これで、商品ほにゃららの店舗foo店はページ(Py,Px)に出力されるという情報ができました。これを組み合わせてページごとの数量の合計を算出します
Q出力ページリスト
SELECT Py, Px, Sum(数量) AS 数量の合計
FROM (テーブルA INNER JOIN Q出力商品ページグループ ON テーブルA.棚番号 = Q出力商品ページグループ.棚番号) INNER JOIN Q出力店舗リスト_連番付き ON テーブルA.店舗名 = Q出力店舗リスト_連番付き.店舗名
GROUP BY Py, Px;
サンプルの場合に実際に得られる結果は
Py | Px | 数量の合計 |
---|---|---|
0 | 0 | 9 |
0 | 1 | 4 |
1 | 0 | 8 |
2 | 1 | 2 |
です。合計が「0」は実際には「データがない」なので出力されません。「数量」が「0」で実際に登録されているだとか、マイナス数量が許容されてて合計「0」がありうるとかだとまた変わってくるのでこの方法は使えないかもしれません
必要な情報がそろったのでレポート出力用のクエリを作成します
元データにはページの情報が含まれていないのでワンステップ挟んで最終的なクエリを作成します
Q出力全ページデータ
SELECT Py, テーブルA.*, Q出力店舗.*
FROM Q出力店舗, テーブルA INNER JOIN Q出力商品ページグループ ON テーブルA.棚番号 = Q出力商品ページグループ.棚番号;
Qレポート出力データ
SELECT
棚番号
, Sum(数量) AS 合計数量
, Q出力全ページデータ.Py
, Q出力全ページデータ.Px
, f0
, f1
, f2
, Sum(IIf([店舗名]=[f0],[数量])) AS n0
, Sum(IIf([店舗名]=[f1],[数量])) AS n1
, Sum(IIf([店舗名]=[f2],[数量])) AS n2
FROM
Q出力ページリスト
INNER JOIN
Q出力全ページデータ
ON
Q出力ページリスト.Px = Q出力全ページデータ.Px
AND
Q出力ページリスト.Py = Q出力全ページデータ.Py
GROUP BY
棚番号
, Q出力全ページデータ.Py
, Q出力全ページデータ.Px
, f0
, f1
, f2
;
これで、ページ単位でデータがないデータは取り除いたデータが取得できます。「G」→「Px」等変更になってるのでレポートのデザインも合わせて修正してください
計算がかなり増えているのでレポート表示にもそれなりに時間がかかりそうな気がします。出力時間が気になる場合は、クエリを細かく分けて作成しているので「ここで遅くなる」等チェックしてみてください
通報 ...