単二電池

今、グループが70個、人が100人くらいのデータベースを作成中です。1つのグループには3人の人が属し、1人1~7のグループに属します。
1対多ならまだ考えやすいのですが、多対多ということで、悩んでいます。
とりあえず今は、グループの情報を管理するテーブル、人の情報を管理するテーブルと、グループIDと人IDの組み合わせをテーブルにして、この三つをつなぐことで様々な作業をするようにしています。そこで困った問題が二つ発生しました。

・作業の都合上、ある人がどのグループに所属しているかというのを紙ベースで一覧にしなければならなくなりました。イメージとしては下のような感じです。
レポートでもフォームでも何でもいいのですが、このような形でデータを出すことは出来ないでしょうか?
(地道に手作業で写すしかないでしょうか)
┌──┬────┐
│名前│グループ│
├──┼─────┤
│○○│A B D │
├──┼─────┤
│××│B E   │
├──┼─────┤

・各グループで、各人10点満点の点数を持っており、その平均点を元に色々作業をしたいことがあります。(同じ人でもグループ毎に点数が異なるので、今はその点数をグループIDと人IDの組み合わせを管理するテーブルに入れて一緒に管理しています。)クエリやフォームなどで、平均点を計算させてグループを管理しているテーブルに書き込むことは出来ないでしょうか。

長文申し訳ございませんが、宜しくお願いいたします。

A 回答 (2件)

 まず、以下の3つのテーブルと各項目を前提とします。


(1) T_グループ
 グループID
 平均点
(2) T_人
 人ID
(3) T_組み合わせ
 人ID
 グループID
 点数

 1番目の質問について
 以下をコピーし、クエリーのSQLビューでペーストして下さい。ペーストした後はデザインビューに戻して構いません。

SELECT T_人.人ID, DMax("[グループID]","T_組み合わせ","[T_組み合わせ]![人ID]='" & [人ID] & "'") AS グループ1, DMax("[グループID]","T_組み合わせ","[T_組み合わせ]![人ID]='" & [人ID] & "' AND [グループID] < '" & [グループ1] & "'") AS グループ2, DMax("[グループID]","T_組み合わせ","[T_組み合わせ]![人ID]='" & [人ID] & "' AND [グループID] < '" & [グループ2] & "'") AS グループ3, DMax("[グループID]","T_組み合わせ","[T_組み合わせ]![人ID]='" & [人ID] & "' AND [グループID] < '" & [グループ3] & "'") AS グループ4, DMax("[グループID]","T_組み合わせ","[T_組み合わせ]![人ID]='" & [人ID] & "' AND [グループID] < '" & [グループ4] & "'") AS グループ5, DMax("[グループID]","T_組み合わせ","[T_組み合わせ]![人ID]='" & [人ID] & "' AND [グループID] < '" & [グループ5] & "'") AS グループ6, DMax("[グループID]","T_組み合わせ","[T_組み合わせ]![人ID]='" & [人ID] & "' AND [グループID] < '" & [グループ6] & "'") AS グループ7
FROM T_人;

 このクエリーを実行すると、各人の所属グループが横に並びますが、IDの降順になりますのでご注意ください。

 2番目の質問について
 以下をコピーし、クエリーのSQLビューでペーストして下さい。ペーストした後はデザインビューに戻して構いません。

UPDATE T_グループ SET T_グループ.平均点 = DAvg("[点数]","[T_組み合わせ]","[グループID]='" & [グループID] & "'");

 このクエリーを実行すると、T_組み合わせテーブルのグループごとの平均値で、T_グループを更新します。

以上
    • good
    • 0
この回答へのお礼

感動しました!!!
ところで、浅知恵でDMaxをDMinに、<を>にしたら昇順にできるのかと思いましたが、そういう訳でもないのですね。降順でも問題ないと思いますので、活用します。本当にありがとうございました。

お礼日時:2005/12/20 20:09

 No.1の続きです。


>DMaxをDMinに、<を>にしたら昇順にできるのかと思いましたが
 以下のクロス集計クエリーならば、昇順にできますが、若干、ご希望のフォーマットとは異なります。

TRANSFORM First(T_組み合わせ.グループID) AS グループIDの先頭
SELECT T_組み合わせ.人ID
FROM T_組み合わせ
GROUP BY T_組み合わせ.人ID
PIVOT T_組み合わせ.グループID;
    • good
    • 0
この回答へのお礼

再びのご回答ありがとうございます。なるほど、色々なやり方があるのですね。
まずはNo.1のやり方で運用してみて、不都合があるようだったらこちらも試してみたいと思います。
再び感動しました。

お礼日時:2005/12/21 22:20

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