AccessのSQLで集計がうまくいかず「パラメーターの入力」が求められてしまいます


今、以下のようなAccessのファイルがあります。
https://xfs.jp/VV33Hg

このAccessファイル内の2つのテーブル「T_注文履歴」と「T_メニュー一覧」に対して、下記のSQLを実行したのですが。

-----------
select tb2.商品コード as 商品,count(tb2.商品コード) as 付与ポイント
from (select tb1.商品コード,tb1.店舗
from (select 商品コード,店舗ID as 店舗,メニューID
from T_注文履歴
group by 商品コード,店舗ID,メニューID
union all
select 商品コード,店舗,メニューID
from T_メニュー一覧
group by 商品コード,店舗,メニューID
) as tb1
group by tb1.商品コード,tb1.店舗
) as tb2
group by tb2.商品コード
-----------

「パラメーターの入力 店舗」と、入力を求められてしまいます。
そしてこの画像 https://f.hatena.ne.jp/moon-fondu/20210410103743 のように、SQLの集計結果が、少し違う結果となってしまいます。

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2021/04/10 21:46:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:moon-fondu

中のサブクエリ、

-----------

select 商品コード,店舗ID as 店舗,メニューID

from T_注文履歴

group by 商品コード,店舗ID,メニューID

union all

select 商品コード,店舗,メニューID

from T_メニュー一覧

group by 商品コード,店舗,メニューID

-----------

を実行してみますと。

こちら https://f.hatena.ne.jp/moon-fondu/20210410105303 のように「店舗」フィールドにデータが入ってない行がなぜか、9行出てきます。


フィールドにデータが不足している?と思ったのですが。from句で呼び出している「T_注文履歴」「T_メニュー一覧」テーブルには、データは入っていてますし。 

不足しているセルを含む「店舗ID」フィールド(「店舗」フィールドの元の列)には、こちら https://f.hatena.ne.jp/moon-fondu/20210410104224  のように、データを入れてますし。

なぜパラメーターの入力を求められるのか、不具合が起きるのか、判りかねておりまして。


原因と対処法をお教えいただけますと有難いです。

よろしくお願い致します<m(__)m>

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント1500pt

とりあえず、店舗の入力を促されている件は、union の2番目の select で T_メニュー一覧の列にない「店舗」が登場しているからです。

修正するとしたら、こんな感じ。

SELECT tb2.商品コード AS 商品, count(tb2.商品コード) AS 付与ポイント
FROM (select tb1.商品コード,tb1.店舗
                from (select 商品コード,店舗ID as 店舗,メニューID
                    from T_注文履歴
                    group by 商品コード,店舗ID,メニューID
                    union all
                    select 商品コード,店舗ID,メニューID             ★ここと
                    from T_メニュー一覧
                    group by 商品コード,店舗ID,メニューID           ★ここ
                    ) as tb1
                group by tb1.商品コード,tb1.店舗
                )  AS tb2
GROUP BY tb2.商品コード;

union の前後の SQL は、お互いのことを知らないので、1番目の select で as で名前を付けたことを、2番目の select は知りません。




「集計結果が少し違う」については、どんな集計をやりたいのかが分からないと何とも言えません。

tb2 の名がついている副問い合わせで、商品コードで group by しちゃってますから、その結果はそれぞれの商品コートにつき 1行です。

それを count(tb2.商品コード) しても、値は 1 にしかならず。


勝手に想像すると、売れた商品の種類の数だけポイントが付くのでしょうか(いや、例題にしても不自然か

仮にそうだとして、T_注文履歴と T_メニュー一覧を union で結合しているところから理解できません。

注文履歴のなにがしかを集計したいのだろうというのは想像つきますけれど、そこから先が分かりません。


まあ、何かの実物を質問用に書き替えているのは分かりますけれど、ちょっと例としては分かりにくいです。

他3件のコメントを見る

その他の回答0件)

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント1500pt

とりあえず、店舗の入力を促されている件は、union の2番目の select で T_メニュー一覧の列にない「店舗」が登場しているからです。

修正するとしたら、こんな感じ。

SELECT tb2.商品コード AS 商品, count(tb2.商品コード) AS 付与ポイント
FROM (select tb1.商品コード,tb1.店舗
                from (select 商品コード,店舗ID as 店舗,メニューID
                    from T_注文履歴
                    group by 商品コード,店舗ID,メニューID
                    union all
                    select 商品コード,店舗ID,メニューID             ★ここと
                    from T_メニュー一覧
                    group by 商品コード,店舗ID,メニューID           ★ここ
                    ) as tb1
                group by tb1.商品コード,tb1.店舗
                )  AS tb2
GROUP BY tb2.商品コード;

union の前後の SQL は、お互いのことを知らないので、1番目の select で as で名前を付けたことを、2番目の select は知りません。




「集計結果が少し違う」については、どんな集計をやりたいのかが分からないと何とも言えません。

tb2 の名がついている副問い合わせで、商品コードで group by しちゃってますから、その結果はそれぞれの商品コートにつき 1行です。

それを count(tb2.商品コード) しても、値は 1 にしかならず。


勝手に想像すると、売れた商品の種類の数だけポイントが付くのでしょうか(いや、例題にしても不自然か

仮にそうだとして、T_注文履歴と T_メニュー一覧を union で結合しているところから理解できません。

注文履歴のなにがしかを集計したいのだろうというのは想像つきますけれど、そこから先が分かりません。


まあ、何かの実物を質問用に書き替えているのは分かりますけれど、ちょっと例としては分かりにくいです。

他3件のコメントを見る

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません