• ベストアンサー

ACCESSで同時に出た数字を数字別にカウントするにはどうすればよいのでしょうか?

現在ACCESSの勉強をしています。 1~6までの数字が書かれた6枚のカードから3枚を同時に引いて 出たカードの数字を記録していくデータベースを作るとき、 ・同時に引いた3枚が1,3,6だった時 「1」のレコードに同時に出たカードの数字、3.6をカウント 「3」のレコードに同時に出たカードの数字、1.6をカウント 「6」のレコードに同時に出たカードの数字、1.3をカウント 数字(1~6)ごとに同時に引いた残り2枚の数字を 記録していくクエリを作りたいのですが このような集計をするには どのようにクエリを作成すればよいのでしょうか? 作成方法がわかる方、ご助力をよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.3

簡単にするには、クエリを2つ作ります。 結果クロス集計にご希望の結果が得られます。 クエリ:結果クロス集計 SELECT 結果テーブル.[1枚目] AS 元, 結果テーブル.[2枚目] AS 相手 FROM 結果テーブル UNION ALL SELECT 結果テーブル.[1枚目] AS 元, 結果テーブル.[3枚目] AS 相手 FROM 結果テーブル UNION ALL SELECT 結果テーブル.[2枚目] AS 元, 結果テーブル.[1枚目] AS 相手 FROM 結果テーブル UNION ALL SELECT 結果テーブル.[2枚目] AS 元, 結果テーブル.[3枚目] AS 相手 FROM 結果テーブル UNION ALL SELECT 結果テーブル.[3枚目] AS 元, 結果テーブル.[1枚目] AS 相手 FROM 結果テーブル UNION ALL SELECT 結果テーブル.[3枚目] AS 元, 結果テーブル.[2枚目] AS 相手 FROM 結果テーブル; クエリ:結果ユニオン TRANSFORM Count(結果ユニオン.相手) AS 相手のカウント SELECT カードテーブル.カード FROM カードテーブル LEFT JOIN 結果ユニオン ON カードテーブル.カード=結果ユニオン.元 GROUP BY カードテーブル.カード PIVOT 結果ユニオン.相手 In (1,2,3,4,5,6);

kintetsu
質問者

お礼

回答ありがとうございます。 記入していただいた2つのクエリを作ったら 同時に出た数字の集計が出来ました。 No2の方とSQL文は違うのに 同じ結果になるとは… 奥が深いです… どのように組み合わせを発想するかが 肝要なのですね

その他の回答 (3)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.4

#3です。 クエリ名が逆でした。 上の方が「結果ユニオン」 下が「結果クロス集計」です。(--;

kintetsu
質問者

お礼

了解しました。

noname#15065
noname#15065
回答No.2

 なかなか難しいですね。テーブル1つとクエリ2つ追加でやってみました。 (1) テーブルの追加  まず、「ペアテーブル」を追加します。フィールドは「ペア」(数値型)1フィールドのみで、その内容は、 12 13 21 23 31 32 の6レコードとします。 (2) クエリの追加  次にクエリ「Q_同時に出たカード」を追加します。以下をSQLビューでペーストしたら、デザインビューに戻して構いません。 SELECT IIf(Left([ペア],1)=1,[1枚目],IIf(Left([ペア],1)=2,[2枚目],[3枚目])) AS カード, IIf(Right([ペア],1)=1,[1枚目],IIf(Right([ペア],1)=2,[2枚目],[3枚目])) AS 同時に出たカード FROM 結果テーブル, ペアテーブル; (3) クエリの追加(その2)  最後にクロス集計クエリを作成します。その内容は、 TRANSFORM Count(Q_同時に出たカード.同時に出たカード) AS 同時に出たカードの枚数 SELECT Q_同時に出たカード.カード FROM Q_同時に出たカード GROUP BY Q_同時に出たカード.カード PIVOT Q_同時に出たカード.同時に出たカード;  最後のクロス集計クエリを実行すると、ご所望の結果が得られると思います。

kintetsu
質問者

お礼

回答ありがとうございます。 教えていただいたとおり入力したら出来ました。 SQL文までまだ習ってないので それぞれの関数を調べつつやりました。 きっちりわかってないと操るのは難しそうですね。 がんばります。

noname#60992
noname#60992
回答No.1

現在のテーブルの構造では結果テーブルのフィールドの値と、最終的に表示させるテーブルのフィールド名を関係付けようとしているのでVBAを使用しないと難しいかもしれません。 結果テーブルの構造以下のようにを見直せば、簡単なクエリで済むと思います。 フィールド名 [回数],[1],[2],[3],[4],[5],[6] [1]~[6]のフィールドの値は、    引かれたカードの値を = 1    引かれなかったカードの値 = 0

kintetsu
質問者

お礼

回答ありがとうございます。 VBAはまだ扱えてないので 他の方法をあたってみます。

関連するQ&A