QA@IT

MS Accessのクロス集計結果をワークテーブルに累積する方法

7473 PV

MS Accessのクエリで質問です。

クロス集計クエリで毎月直近1年の月別商品別集計を行っているのですが
その結果を別テーブルに累積させたいという要望があり
いろいろ試しているのですが挫折したのでお知恵を拝借させてください。

  1. 毎月集計するクロス集計の結果
       2012/09 2012/10 2012/11 2012/12 2013/01 ・・・・・ 2012/10
    商品A 100   0
    商品B 200   100
    商品C 300   200
    商品D 400   300
    商品E 500   400

  2. 1を累積させたいテーブルのレイアウト
    商品名
    11ヶ月前
    10ヶ月前
    9ヶ月前



    2ヶ月前
    1ヶ月前
    当月

◆やってみたこと

  1. クエリの種類を追加クエリにする
     → クロス集計でなくなるのでNG

  2. クロス集計クエリを利用して追加クエリを作成する
     → 列名が違うと怒られる
       テーブル作成クエリならOKだが列名が・・・

  3. SQL文を直接書いて実行する
     → 列名が違うと怒られる
       ちなみに書いたクエリは
       INSERT INTO 累積用のテーブル名
       SELECT *
       FROM クロス集計クエリ名;

何か方法をご存知でしたらご教授ください。

  • 累積用テーブルが 1年分なのに24か月分列があるようですがそこは実際は数はあっているということでいいですか? -
  • 累積テーブルのレイアウトがよくわかりません。「商品名」も「当月」もどちらも列名ですか?
    最大で24か月分(または12か月分)列に格納するんですか?
    -
  • 返信が遅くなって申し訳ございません。

    累積用テーブルのレイアウトが間違ってました。
    12ヶ月分です。訂正しました。

    また、「商品名」「当月」も列名です。

    間違いだらけな上、分かりづらくてすいません。
    -

回答

実際にAccessいじってないので想像ですが、
列名を省略せずにInsert文を書けばいけるんじゃないでしょうか。

クロス集計クエリの列名がどうなるかわかりません(とくに商品名の列ってどうなるのか)が、そこはテーブル作成クエリでできあがるテーブルを参考にすればいいと思います。

insert into 累積用のテーブル名 (商品名,11ヶ月前,10ヶ月前,9ヶ月前, ... ,当月)
select 商品名, [2012/09], [2012/10], [2012/11], ... ,[2013/08]
from クロス集計クエリ名

※ []で括っているのは割り算になってしまうから、列名であることを明示するためです。

毎月手直しする必要があるのがイマイチですが、月に一度 2か所なので。
なんにせよ動かなければしかたないので検証してみて、うまくいったらVBAにしてみてもいいでしょうね。

それよりコメントにも書きましたがこれ翌月はどうするんですかね?このテーブルに累積されるイメージがわかないのですが。

編集 履歴 (0)
  • ありがとうございます。
    SQLに列名まで書けばいけました。
    (当然ですね・・・Accessのクエリに拘りすぎてました。)
    使う方がPCに疎いのでVBAから実行するようにします。
    -
  • > それよりコメントにも書きましたがこれ翌月はどうするんですかね?
    > このテーブルに累積されるイメージがわかないのですが。

    実際には商品名の前に集計年月などの情報を持っています。
    情報を端折りすぎました。
    すいません。
    -
  • なるほど、別途あるのですね。了解しました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。