• ベストアンサー
※ 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

  • アクセスのリレーションシップが多対多の場合について

    初めて質問させていただきます。 多対多の対応方法については勉強してやっては見たのですが、うまく機能しないので質問させていただきます。 中間テーブルを作成して現在ABCの3つのテーブルがあります。頓挫しているのでかなり不備がありますが、それも踏まえて助言をお願いします。    フィールド名は A:aID、氏名、所有物No、数量 B:bID、aID、cID、事由、日時 C:cID、事由タイプ、タイプ1のgrade、料金、タイプ2のgrade、料金、タイプ3のgrade、タイプ3の細分タイプ、料金 Aは名簿、Bは中間用に試作、C料金体系テーブル、といった形を目指しました。 同一人物で複数請求があり、一つのフォーム上でAとBを追加、更新出来るようにしたいです。 また、料金体系のテーブルの事由タイプは3つでそれぞれgrade毎に料金体系があります。 Cのテーブルはそれぞれのタイプはその他のタイプのところは空欄になっています。 このままクエリを作って見ると追加、更新が出来ません。 以上、わかりにくいですが、助言お願いします。

  • アクセスについて教えてください。

    アクセス2002 XP使用 Aテーブル ID 氏名 電話番号 住所  などの個人情報入力 Bテーブル ID (リレーションするためのID主キー) 管理ID 購入商品 上記のように今作っているのですが、AテーブルIDとBテーブルは1対多でのリレーションしてます。 フォームで帳票形式で見たとき、 管理NOの数だけレコード表示されるのはいいのですが、 AテーブルID 1に対し、管理IDが111と三件分あるとして、(勿論BテーブルIDには123となってます) AテーブルID1にひとつ、受付NOを追加して、   ID  受付NO  管理ID   1   1    1   1   2    1   1   3    1   2   1    2   2   2    2   3   1    3 見たいに受付NOがIDごとに123。。。と自動入力されル洋にしたいのですがどのようにすればできますか?素人なので説明もうまくできなくわけが変わらないかもしれませんがおしえてください。よろしくお願いします。

  • カラムの関係が多対多の場合の集計方法

    ページ名 | ユーザID mypage | 2 other | 2 other | 4 mypage | 2 index | -1 index | -1 mypage | 2 other | 3 other | 2 mypage | 2 index | -1 index | 3 上記のテーブルのように、ページ名とユーザIDが多対多のような関係になっている時に、 各ページにアクセスしてきたユニークユーザ数を取得したいと考えております。 上記の例ですと、求めたい答えは下記となります。 mypage:1 アクセスしたユーザは、2だけなので、ユニーク数は1 index:2 アクセスしたユーザは、-1と3なので、ユニーク数は2 other:3 アクセスしたユーザは、2と3と4なので、ユニーク数は3 group byで分けて集計すれば良いと単純に考えたのですが、 selectの対象は、group by の対象で無ければならないみたく、 どのように集計すれば良いのか、とても困っております。 大変申し訳ありませんが、ご教授願えませんでしょうか? 宜しくお願い申し上げます。

  • SQL文の結合(一対多)がわからない

    色々とネットで調べてみたのですが、ピンとこないので質問させていただいています。 以下のようなテーブルを想定しています。 「テーブルA」 ユニークキー データ1 データ2 ・・・ 0001 ... 0002 ... 0003 ... 「テーブルB」 キー データA データB ・・・ 0001 ... 0001 ... 0002 ... テーブルAではユニークキーは重複していないのですが、テーブルBのキーは重複しています。 このような状況で、テーブルBの”キー”とテーブルAの”ユニークキー”を照合させて、テーブルBに”データ1 データ2 ・・・”を流し込みたいと思っています。 現状では、複数の検索結果が出るためにエラーとなっています。「一対多」結合を利用するというところまではわかったのですが、そこから先がよくわかりません。 どなたか解説していただけないでしょうか。 初心者の質問で恐縮ですが、お教え頂ければ嬉しいです。

  • アクセスでお問い合わせDBを作成したいが

    顧客テーブルのID(オートナンバー)と、問合せ入力テーブルの親ID(数値型)をリレーションシップで一対多の設定をしています。 顧客テーブルから作成したフォームからコマンドボタンで新規の問合せ入力フォームを開きたい(サブフォームは別の用途に使用したいので使いたくありません)のですが、フィルタがかかって入力できず、顧客テーブルのIDが問合せ入力フォームのIDに自動的に入りません。どのようにしたらよいのでしょうか? とても困っています。お願いします。

  • accessでこんなこと出来ますか??

    access2000を使用しております。 例えばパソコン教室のクラス分けをするとします。 生徒さんには1回にKEYBOAD・EXCEL・WORDの3科目のテストを5回受けていただきます。その結果によって、A・B・Cのクラスに分けたいと思います。それぞれのクラスには条件があり、AクラスはKEYBOADは50点以上orWord20点以上、BクラスはKeyboad70点以上&(Word60以上orEXCEL30以上)、CクラスはKeyboad80以上&word70点以上&Excel50点以上という条件をつけます。 現在生徒テーブル・テストテーブル・クラステーブルを作ってあり、 生徒テーブルには【(1)生徒ID(2)生徒名】をつくり、 テストテーブルには【(1)テスト回数名(1回目とか)(2)keyboad点数(3)wordの点数(4)Excel(5)生徒ID(生徒テーブルにリレーション)】 それからクラステーブルには、【(1)クラスID(2)クラス名(3)KEYBOAD最低条件(4)WORD最低条件(5)EXCEL最低条件】を作ります。 まず、生徒名を元にテストの点数がサブフォームで見れるフォームを作りました。 ここで、2つ教えていただきたいのです。 1.クラスを元にしたフォームで、先ほどの条件にあう生徒をサブフォームで見れるフォームを作りたい。 2.生徒を元にしたフォームで、その生徒の点数が条件を満たしているクラスをサブフォームで見れるフォームを作りたい。 この2つ出来るのでしょうか?出来るのであればどうすればよいのでしょうか?

  • Access 日報管理する データベース作成しています。

    テーブルAに次のフィールドがあります。 作業日付 作業項目 メモ 作業時間 ログインID グループ名 ログインIDとグループ名は別のフォームからのデータを表示しています。 (非連結) テーブルAはフォームAで入力しています。 レコードに非連結のログインIDとグループを保存していきたいのですが, SQLとかVBAとかいろいろ調べてやっていますが, うまく出来ません。 Public Sub aiu() Dim db As Database, rst As Recordset Set db = CurrentDb Set rst = db.OpenRecordset("TテーブルA", dbOpenTable, dbAppendOnly) With rst .AddNew ![ログインID] = Forms![FテーブルA]![ログインID] '---ログイン時 ![グループ3] = Forms![FテーブルA]![グループ名] '---ログイン時 ![作業日] = Forms![F日報メイン].[埋め込み25]![作業日付] ![項目No.] = Forms![F日報メイン].[埋め込み25]![作業項目] ![メモ] = Forms![F日報メイン].[埋め込み25]![メモ] ![作業時間] = Forms![F日報メイン].[埋め込み25]![作業時間] .Update End With rst.Close db.Close Set db = Nothing End Sub いろいろ調べていますがどうしても出来ません。 申し訳ありませんがどうか教えて下さい。

  • access 1対1と1対多のテーブルをクエリで集計したい…

    受注管理のデータベースを作っています。 売り上げを計算するクエリを作ったのですがどうもうまくいかないので質問します。 集計したいテーブルですが 受注マスタテーブル 注文番号(主キー テキスト型) 注文日(日付型) 氏名 : : 受注明細マスタテーブル 注文番号 (重複あり)受注マスタの注文番号と1対多のリレーションシップ 商品名 品番 販売単価 購入個数 経費・返品金額テーブル 注文番号(主キー)受注マスタの注文番号と1対1のリレーションシップ 経費 返品金額 これを、販売単価×購入個数-経費+返品金額というようにして1ヵ月ごとに集計しようとして、下のようなクエリを作ったのですが経費が何回も計算されてうまくいきませんでした… よろしくお願いします。 SELECT Format(注文者マスタ!注文日,"yyyy/mm") AS 月, Sum([受注明細マスタ]![販売単価]*[受注明細マスタ]![購入数量]-[経費・返品金額テーブル]![経費]+[経費・返品金額テーブル]![返品金額]) AS 売上 FROM (注文者マスタ RIGHT JOIN 経費・返品金額テーブル ON 注文者マスタ.注文番号 = 経費・返品金額テーブル.注文番号) LEFT JOIN 受注明細マスタ ON 注文者マスタ.注文番号 = 受注明細マスタ.注文番号 GROUP BY Format(注文者マスタ!注文日,"yyyy/mm");

  • access 2000フォーム検索 サブフォームじゃだめ?

    access 2000でフォームにリレーションされたサブフォームを設置したのですが、使う段になってから気づいたのですが、サブフォームの検索できないんですね。 できないというか、リレーションされた結果が表示されるので、その中での検索となってしまう。 フォーム内容が1体多となっている。 テーブルA id name 1 aoki 2 sasaki テーブルAのidとテーブルBのuidはリレーションされている。 テーブルB uid book 1 辞典 2 漫画 1 ノート テーブルAのid1 aokiを表示しているフォームで、テーブルBの「漫画」で検索した際に検索できるようにするにはどうすればいいでしょうか。

  • Accessのデータベース管理について。

    Windows NTでAccess2000を使っています。 製造業で伝票内容の管理をするためのAccessファイルを作ろうと思っています。 これまではユーザーが2~3人くらいだったので気にもとめていなかったのですが、 今回は多数のユーザーが使用するためどのようにデータベースを管理していけばいいのか困っています。 以下の質問にどれか1つでも結構ですので答えをいただければ幸いです。よろしくお願いします。 <ユーザー> (1)管理者(私)…全ての権限をもつ (2)グループ1(8人くらい)…各人が担当する伝票のデータを入力。   ゆえにデータの追加・編集・削除・データのエクスポートは可能であるがAccessのデザインの変更は不可。 (3)グループ2(さらに5つのグループに分かれる)…伝票のデータを元にして各グループのフォームで作業が終了次第チェックを入れてもらう。   ゆえにチェックの入力以外はすべて読み取り専用(データの追加・編集・削除・データのエクスポートを不可)とする。 1.この環境で有効なセキュリティ設定を教えてください。  (ユーザーアカウントとグループアカウントをどう組み合わせるか。   データベースの分割やレプリケーションの必要があるかなど) 2.ひとつの伝票テーブルにグループ1がデータを打ち込むとすると、同時入力は可能でしょうか。  (各人でフォームを分ければ可能なのでしょうか?それとも各人で伝票テーブルを用意して   入力後に1つのテーブルにまとめる方法をとるべきなのでしょうか?) 3.できればグループ2はパスワードを設定したくないのですが可能でしょうか。 その他、アドバイスがありましたらあわせてよろしくお願いします。

専門家に質問してみよう