• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセスで多対多のデータベースを作る場合で(長文です))

多対多のデータベース作成時の課題と解決方法

このQ&Aのポイント
  • 多対多のデータベースを作成する際の課題として、グループと人の関係性の管理が挙げられます。現在は、グループの情報を管理するテーブル、人の情報を管理するテーブル、そしてグループIDと人IDの組み合わせをテーブルで管理していますが、この方法では手作業が必要な問題があります。そのため、データを一覧に出力する方法やグループ毎の平均点を計算する方法について検討しています。
  • データ一覧の出力方法としては、紙ベースでの写し作業が現状の解決策ですが、より効率的な方法を検討しています。例えば、レポートやフォームを活用することで、自動的にデータを出力することが可能です。これにより、手作業の負担を軽減することができます。
  • 平均点の計算方法については、現在はグループIDと人IDの組み合わせを管理するテーブルに点数を持っていますが、より効率的な方法を模索しています。クエリやフォームを利用して、平均点を計算し、グループを管理しているテーブルに書き込むことができれば、作業の効率化に繋がります。

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

  • ベストアンサー
noname#14493
noname#14493
回答No.1

 まず、以下の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_グループを更新します。 以上

UTwTU
質問者

お礼

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

その他の回答 (1)

noname#14493
noname#14493
回答No.2

 No.1の続きです。 >DMaxをDMinに、<を>にしたら昇順にできるのかと思いましたが  以下のクロス集計クエリーならば、昇順にできますが、若干、ご希望のフォーマットとは異なります。 TRANSFORM First(T_組み合わせ.グループID) AS グループIDの先頭 SELECT T_組み合わせ.人ID FROM T_組み合わせ GROUP BY T_組み合わせ.人ID PIVOT T_組み合わせ.グループID;

UTwTU
質問者

お礼

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

関連するQ&A

専門家に質問してみよう