- ベストアンサー
複数テーブルからの抽出と結合(Access)
マイクロソフトのアクセスを使って、 複数テーブルから抽出と結合をする方法について教えてください。 各生徒の履修科目が表になっています。例えば 数学を履修してる生徒 1 山田太郎 2 加藤次郎 3 足立花子 : 国語を履修している生徒 1 山田太郎 2 足立花子 3 東京三郎 : 理科を履修している生徒 1 京都太郎 2 足立花子 : これらの表から生後ごとの履修科目の一覧表を作成するにはどうするのでしょうか? つまり結果として 1 山田太郎 数学、国語 2 加藤次郎 数学 3 足立花子 数学、国語、理科 : の感じで生徒が履修している科目を表にしたいのです。 ずっと悩み続けているのですが、まったく手も足も出ない状態です。 どなたかお助けください。お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
テーブルがデータベースのテーブルになっていないですね 生徒と履修科目というのは典型的な多対多の関係です で、多対多の関係のテーブル構造は [生徒マスタ](生徒CD、生徒名、入学年度、生年月日、性別、・・・) [科目マスタ](科目CD、科目名、単位、・・・) [履修状況](生徒CD、科目CD) のような3つのテーブルで表します このようになっていればお望みの一覧表も簡単に出すことができます (もっといろんなことができます) Accessを使い続けていかれるつもりなら このようなテーブルに作りかえることをお勧めします
その他の回答 (3)
- venzou
- ベストアンサー率71% (311/435)
dlookupやdcount、iif等の関数を使えば1つのクエリで変換可能だと思います。 例: 各テーブルを「数学」「国語」「理科」と仮定します。 恐らく別に名列表があると思いますので、「名列表」とします。 SELECT 名列表.番号, 名列表.名前, iif(dcount("*","数学","名前=""" & 名列表.名前 & """")=0,Null,"数学") as 数学, iif(dcount("*","国語","名前=""" & 名列表.名前 & """")=0,Null,"国語") as 国語, iif(dcount("*","理科","名前=""" & 名列表.名前 & """")=0,Null,"理科") as 理科 FROM 名列表
- y_y_co
- ベストアンサー率23% (11/46)
データを、 山田太郎,数学 加藤次郎,数学 足立花子,数学 山田太郎,国語 足立花子,国語 東京三郎,国語 京都太郎,理科 足立花子,理科 : のようにできれば、3表(テーブル)を1ツのテーブルにし、 データを並べ替え、 山田太郎,数学 山田太郎,国語 加藤次郎,数学 足立花子,数学 足立花子,国語 : のような感じまで、もっていければ、 > つまり結果として まで、いけますがどうでしょう?
- kakkysan
- ベストアンサー率37% (190/511)
各テーブルにあるフィールドは生徒氏名だけですか? すべてのテーブル定義をお知らせ下さい。