Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2010)
どのようなパターンが多いのか クエリ?で解析したい
投稿日時: 20/09/04 10:28:35
投稿者: mmiwa

教えてください
 
ページ中段のようなテーブル1を作成しました
どのような発注パターンが多いのか
解析したいと考えています
 
ほしい結果は以下のようなものです
【一位】 3回
みかん    3
リンゴ    2
【二位】 2回
みかん    2
リンゴ    2
なし    1
 
一旦テーブル2の形へ変更すればクロス集計で解析できそうですが
1.テーブル1から直接解析するにはどうしたら良いでしょうか
2.テーブル1をテーブル2の形に書き換えるにはどうしたら良いでしょうか
 
よろしくお願いいたします
 
テーブル1
ID    日付    会社    商品    数
1    2020/09/01    葵    みかん    3
2    2020/09/01    葵    リンゴ    2
3    2020/09/03    瓢箪    みかん    2
4    2020/09/03    瓢箪    リンゴ    2
5    2020/09/03    瓢箪    なし    1
6    2020/09/08    桔梗    みかん    3
7    2020/09/08    桔梗    リンゴ    2
8    2020/09/10    葵    みかん    3
9    2020/09/10    葵    リンゴ    2
10    2020/09/10    葵    バナナ    1
11    2020/09/12    桔梗    みかん    3
12    2020/09/12    桔梗    リンゴ    2
13    2020/09/14    瓢箪    みかん    2
14    2020/09/14    瓢箪    リンゴ    2
15    2020/09/14    瓢箪    なし    1
 
テーブル2
ID    日付    会社    商品発注
1    2020/09/01    葵    みかん    3 リンゴ 2
2    2020/09/03    瓢箪    みかん    2 リンゴ 2 なし    1
3    2020/09/03    桔梗    みかん    3 リンゴ 2
4    2020/09/03    葵    みかん    3 リンゴ 2 バナナ 1
5    2020/09/03    桔梗    みかん    3 リンゴ 2
6    2020/09/08    瓢箪    みかん    2 リンゴ 2 なし    1

回答
投稿日時: 20/09/04 13:47:41
投稿者: sk

引用:
どのようなパターンが多いのか クエリ?で解析したい

引用:
ほしい結果は以下のようなものです
【一位】 3回
みかん 3
リンゴ 2
【二位】 2回
みかん 2
リンゴ 2
なし 1

VBA を使ってでも実現したいのか、VBA を使わずに
クエリのみで実現したいのか次第。
 
引用:
一旦テーブル2の形へ変更すればクロス集計で解析できそうですが

[商品]の種類が "みかん"、"リンゴ"、"なし"、"バナナ" の
4 つに限られているのであれば、クロス集計クエリを元にして
更に[テーブル2]のようなレイアウトの結果を得る集計クエリを
作成することは一応可能でしょう。

回答
投稿日時: 20/09/04 14:10:59
投稿者: Suzu

テーブル1から テーブル2 ですが 日付のデータが違うのでしょうか?
 
 
また、テーブル2 から、希望の結果 へ至る 考え方 を説明いただけますか?
みかん2 の回数を数えるなら、4回になります。
 
同日内の みかん2 の回数なら、3回になりますが
同じ考え方で、同日内の リンゴ2 の回数は、4回になります。
 
 
なんとなく・・・
 
リンゴ2 6回
みかん3 4回
みかん2 2回
なし2 2回
バナナ1 1回
 
が欲しいのであれば。。
 
SELECT
 [テーブル1].商品 & [テーブル1].数 AS 商品回数,
 Count(
   SELECT COUNT(*) FROM テーブル1 AS TMP
   WHERE TMP.商品 & TMP.数= テーブル1.商品 & テーブル1.数
      ) AS 回数
FROM テーブル1
GROUP BY [テーブル1].商品, [テーブル1].数;
 
ここから更に順位を表示したいとなるとかなり面倒です。

回答
投稿日時: 20/09/04 15:37:32
投稿者: sk

引用:
【一位】 3回
みかん 3
リンゴ 2

「みかん 3 個、リンゴ 2 個」を発注したケースは
以下の 3 つ。
 
引用:
1    2020/09/01    葵    みかん    3
2    2020/09/01    葵    リンゴ    2

引用:
6    2020/09/08    桔梗    みかん    3
7    2020/09/08    桔梗    リンゴ    2

引用:
11    2020/09/12    桔梗    みかん    3
12    2020/09/12    桔梗    リンゴ    2

 
引用:
【二位】 2回
みかん 2
リンゴ 2
なし 1

「みかん 2 個、リンゴ 2 個、なし 1 個」を
発注したケースは以下の 2 つ。
 
引用:
3    2020/09/03    瓢箪    みかん    2
4    2020/09/03    瓢箪    リンゴ    2
5    2020/09/03    瓢箪    なし    1

引用:
13    2020/09/14    瓢箪    みかん    2
14    2020/09/14    瓢箪    リンゴ    2
15    2020/09/14    瓢箪    なし    1

それ以外のケースとして、「みかん 3 個、リンゴ 2 個、バナナ 1 個」を
発注したケースが 1 つ。
 
引用:
8    2020/09/10    葵    みかん    3
9    2020/09/10    葵    リンゴ    2
10    2020/09/10    葵    バナナ    1

 
つまり、[日付]と[会社]ごとに発注パターンを求めようとしているけれど、
個々のパターンを 1 件以上のレコードの組み合わせで括りたい
ということでしょう。

回答
投稿日時: 20/09/04 17:11:26
投稿者: Suzu

sk さんの引用:
[日付]と[会社]ごとに発注パターンを求めようとしているけれど、
個々のパターンを 1 件以上のレコードの組み合わせで括りたい
ということでしょう。

 
なるほど!そういうことですね。
 
となると、商品 と 数 の組み合わせ数次第では(フィールド数上限255)
クロス集計クエリは使用できませんね。
 
出来たとしても、
引用:
1.テーブル1から直接解析するにはどうしたら良いでしょうか

の手段として使うには厳しそうですね。
 
VBAで関数を作ったほうが早い気がします。

投稿日時: 20/09/04 22:22:59
投稿者: mmiwa

遅くなりました
 
skさん Suzuさん ありがとうございます
 
まず最初にお詫び&訂正させてください
テーブル2の日付を間違えました
正しくは
テーブル2
ID 日付 会社 商品発注
1 2020/09/01 葵 みかん 3 リンゴ 2
2 2020/09/03 瓢箪 みかん 2 リンゴ 2 なし 1
3 2020/09/08 桔梗 みかん 3 リンゴ 2
4 2020/09/10 葵 みかん 3 リンゴ 2 バナナ 1
5 2020/09/12 桔梗 みかん 3 リンゴ 2
6 2020/09/14 瓢箪 みかん 2 リンゴ 2 なし 1
でした
申し訳ありません
 
VBAを使うか否かについては
使わずに済むのならそれに越したことはないと考えています
SQLに精通していないので
クエリで済ますことが出来るのかすら分からなかったのです
 
商品数については上限がありません
 
データベース関連の言葉に慣れていないので正直よく分かりませんが
skさんのご指摘の通り
「個々のパターンを 1 件以上のレコードの組み合わせで括りたい」
のだと思います
 
お二人の書き込みを見て
少なくともAccessの一般機能を活用するだけでは難しいことが分かりました
VBAを使ってチャレンジしてみたいと思います
上手くいかないときはAccess(VBA)で改めて質問させてください
 
一旦この質問は解決済みとさせていただきます
ありがとうございました