プロが教えるわが家の防犯対策術!

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


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


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

A 回答 (4件)

簡単にするには、クエリを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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/19 22:08

#3です。


クエリ名が逆でした。
上の方が「結果ユニオン」
下が「結果クロス集計」です。(--;
    • good
    • 0
この回答へのお礼

了解しました。

お礼日時:2006/01/19 22:10

 なかなか難しいですね。

テーブル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_同時に出たカード.同時に出たカード;

 最後のクロス集計クエリを実行すると、ご所望の結果が得られると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/19 22:02

現在のテーブルの構造では結果テーブルのフィールドの値と、最終的に表示させるテーブルのフィールド名を関係付けようとしているのでVBAを使用しないと難しいかもしれません。



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

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

お礼日時:2006/01/19 21:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!