• ベストアンサー
  • すぐに回答を!

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

  • 質問No.1905534
  • 閲覧数235
  • ありがとう数4
  • 回答数4

お礼率 94% (227/240)

現在ACCESSの勉強をしています。
1~6までの数字が書かれた6枚のカードから3枚を同時に引いて
出たカードの数字を記録していくデータベースを作るとき、


・同時に引いた3枚が1,3,6だった時
「1」のレコードに同時に出たカードの数字、3.6をカウント
「3」のレコードに同時に出たカードの数字、1.6をカウント
「6」のレコードに同時に出たカードの数字、1.3をカウント


数字(1~6)ごとに同時に引いた残り2枚の数字を
記録していくクエリを作りたいのですが
このような集計をするには
どのようにクエリを作成すればよいのでしょうか?
作成方法がわかる方、ご助力をよろしくお願いいたします。

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 64% (482/745)

簡単にするには、クエリを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

お礼率 94% (227/240)

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

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 64% (482/745)

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

お礼率 94% (227/240)

了解しました。
投稿日時:2006/01/19 22:10
  • 回答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

お礼率 94% (227/240)

回答ありがとうございます。
教えていただいたとおり入力したら出来ました。
SQL文までまだ習ってないので
それぞれの関数を調べつつやりました。
きっちりわかってないと操るのは難しそうですね。
がんばります。
投稿日時:2006/01/19 22:02
  • 回答No.1
現在のテーブルの構造では結果テーブルのフィールドの値と、最終的に表示させるテーブルのフィールド名を関係付けようとしているのでVBAを使用しないと難しいかもしれません。

結果テーブルの構造以下のようにを見直せば、簡単なクエリで済むと思います。
フィールド名 [回数],[1],[2],[3],[4],[5],[6]
[1]~[6]のフィールドの値は、
   引かれたカードの値を = 1
   引かれなかったカードの値 = 0
お礼コメント
kintetsu

お礼率 94% (227/240)

回答ありがとうございます。
VBAはまだ扱えてないので
他の方法をあたってみます。
投稿日時:2006/01/19 21:51
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ