• ベストアンサー

複数テーブルからの抽出と結合(Access)

マイクロソフトのアクセスを使って、 複数テーブルから抽出と結合をする方法について教えてください。 各生徒の履修科目が表になっています。例えば 数学を履修してる生徒  1 山田太郎  2 加藤次郎  3 足立花子  : 国語を履修している生徒  1 山田太郎  2 足立花子  3 東京三郎  : 理科を履修している生徒  1 京都太郎  2 足立花子  : これらの表から生後ごとの履修科目の一覧表を作成するにはどうするのでしょうか? つまり結果として  1 山田太郎 数学、国語  2 加藤次郎 数学  3 足立花子 数学、国語、理科  : の感じで生徒が履修している科目を表にしたいのです。 ずっと悩み続けているのですが、まったく手も足も出ない状態です。 どなたかお助けください。お願いします。

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

テーブルがデータベースのテーブルになっていないですね 生徒と履修科目というのは典型的な多対多の関係です で、多対多の関係のテーブル構造は [生徒マスタ](生徒CD、生徒名、入学年度、生年月日、性別、・・・) [科目マスタ](科目CD、科目名、単位、・・・) [履修状況](生徒CD、科目CD) のような3つのテーブルで表します このようになっていればお望みの一覧表も簡単に出すことができます (もっといろんなことができます) Accessを使い続けていかれるつもりなら このようなテーブルに作りかえることをお勧めします

その他の回答 (3)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

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)
回答No.2

データを、 山田太郎,数学 加藤次郎,数学 足立花子,数学 山田太郎,国語 足立花子,国語 東京三郎,国語 京都太郎,理科 足立花子,理科  : のようにできれば、3表(テーブル)を1ツのテーブルにし、 データを並べ替え、 山田太郎,数学 山田太郎,国語 加藤次郎,数学 足立花子,数学 足立花子,国語  : のような感じまで、もっていければ、 > つまり結果として まで、いけますがどうでしょう?

  • kakkysan
  • ベストアンサー率37% (190/511)
回答No.1

各テーブルにあるフィールドは生徒氏名だけですか? すべてのテーブル定義をお知らせ下さい。

関連するQ&A

  • 複数テーブルから値を連結出力するSQLについて

    以下の様な3つのテーブルがあり、それぞれのテーブルを連結して結果を取得したいと思っております。 この場合のSQL文をご教授いただけないでしょうか? 拙い説明でお分かりに難いかと思いますが、何卒、宜しくお願いします。 ●テーブル T1(科目テーブル) 科目ID, 科目名 T2(生徒テーブル) 生徒ID, 生徒名 T3(科目選択テーブル) 科目ID, 生徒ID(科目ID, 生徒IDで連結キー) ●期待出力結果イメージ ※例1)生徒ID=1の場合 科目ID | 科目名 | 生徒ID | 生徒名 ------------------------------------- 1 | 国語 | 1 | 山田太郎 ------------------------------------- 2 | 算数 | 1 | 山田太郎 ------------------------------------- 3 | 理科 | null | null ------------------------------------- 4 | 社会 | null | null ------------------------------------- 5 | 英語 | 1 | 山田太郎 ※例2)生徒ID=2の場合 科目ID | 科目名 | 生徒ID | 生徒名 ------------------------------------- 1 | 国語 | null | null ------------------------------------- 2 | 算数 | null | null ------------------------------------- 3 | 理科 | null | null ------------------------------------- 4 | 社会 | null | null ------------------------------------- 5 | 英語 | 2 | 鈴木花子 ●出力条件 科目テーブルの科目ID, 科目名は全て表示する。 T3(科目選択テーブル)に存在する生徒IDがあれば、その生徒ID、生徒名を表示する。 存在しない場合は、それぞれ「null」として表示する。 出力は生徒IDを条件とする。 何卒、宜しくお願いします。 ※因みに使用DBはMySQL5.1.44です。

    • ベストアンサー
    • MySQL
  • 2つのデータを結合して検索

    MySqlを使用しています。 ------------------ | 苗字 | 名前 | ------------------ | 山田 | 太郎 | | 山田 | 次郎 | | 山田 | 三郎 | ------------------ 上記のようなデータベースを作った場合に 氏名で検索したいのですがどうしたらよいでしょうか? LIKEを使った場合、山だけ、郎だけでは引っかかるのですが 山田太郎を検索されると引っかかりません。 データの結合したものを検索対象にすることはできるでしょうか? よろしくお願いします。

  • 次の条件を満たすSQL文をご教示下さい。

    テーブル名: list no | first_name | last_name | comment ----+------------+-----------+--------- 1 | 太郎 | 山田 | ほげ 2 | 次郎 | 田中 | ふが 3 | 花子 | 山田 | ぴよ 4 | 三郎 | 佐藤 | ぴよ 5 | 太郎 | 山田 | ぴよ 6 | 次郎 | 田中 | ふー 7 | 三郎 | 佐藤 | ふー 8 | 花子 | 山田 | ふー 上記の表から同じ”last_name”を持つ人の”first_name”と”last_name”を重複無しで抽出する(下記のような結果)SQL文は作成可能でしょうか。 結果 first_name | last_name ------------+----------- 太郎 | 山田 花子 | 山田 宜しくお願いします。

  • ACCESSのテーブルでこういう表示は可能でしょうか?

    お願いします 下記のように名前・電話番号・年齢フィールドあるテーブルがあり同一の番号が存在した場合には年齢が一番上の人が代表者となりそれ以外の人は同一のレコードの家族フィールドに表示させたいと思います。 そのようなクエリを組むことは可能でしょうか? 名前 電話番号             年齢 ==================================================== 山田太郎 00-0000-0000  50 山田花子 00-0000-0000  45 山田一郎 00-0000-0000  20 田中次郎 11-1111-1111  55 ↓ 代表者 電話番号            家族1  家族2 ==================================================== 山田太郎 00-0000-0000  山田花子 山田一郎 田中次郎 11-1111-1111 以上よろしく願いします。

  • エクセルの集計での質問

    A列に日付、BからF列に担当者名(1~5)が入っています。 この表で誰が何日稼働したか調べたいのですが、日付の被りがあるのと、例えば▲▲さんが「担当者1」、●●さんが「担当者2」と決まっているわけでなく、早いもの順に「担当者1~5」までに名前が入っています。 A B C D E F 日 担1 担2 担3 担4 担5 1/3 太郎 次郎 花子 三郎 和子 1/3 次郎 太郎 三郎 美和 和子 1/4 花子 次郎 孝夫.......... この場合求められたものが 1/3 太郎 ×1、次郎 ×1、三郎×1、花子×1、和子×1 、美和×1 1/4 花子×1、次郎×1、孝夫×1 なので 太郎1日 次郎2日 三郎1日 花子2日 和子、美和、孝夫各1日 という風にエクセルで集計できないでしょうか?

  • Excelセルで縮小表示

    例えばセルに以下を入力しますと 山田太郎(改行) 山田次郎(改行) 山田三郎 縮小表示だと 山田太郎山田次郎山田三郎 になります。 折り返して全体表示だと 山田太郎 山田次郎 となり、山田三郎隠れて見えないのです。これを全体的に縮小表示はできませんか。お願いします。

  • エクセルでの顧客数のカウント

    エクセルで下記のような表を作っています。 A   B       C 日付 顧客名   売上 10/1 山田太郎  1000 10/5 中村次郎  2000 10/10 鈴木三郎  1000 10/22 中村次郎  2000 10/31 山田太郎  1000 この時に、10月1か月の顧客数をカウントしたいのです。 上記であれば、山田太郎、中村次郎、鈴木三郎の3人ということになるはずです。 どのようにすればできますでしょうか。

  • Excelのセル内容の分割について

    以下のようにセルA1では家族の名前が”・”で区切られて入力してあり、セルB1ではそれに伴う”備考”が記入してあります。 A1                                      | B1 山田太郎・花子・次郎・三郎    | 備考文書 以上のような形式を一括で以下のように行を挿入し分割したいと考えています。 *備考は全てB1をコピーしたい。 山田太郎                             | 備考文書 山田花子                             | 備考文書 山田次郎                             | 備考文書 山田三郎                             | 備考文書 分かり難い説明で申し訳ありませんが宜しく御願い致します。

  • 関数を使って重複するデータを抽出するには?

    今各年度の重複データの抽出の方法がわからなくて困っています。 H20年度         平成21年度 ID   氏名   住所  ID   氏名   住所 102 山田太郎  東京  505 山田次郎  福岡 205 山田花子  京都  603 山田五郎  滋賀 505 山田次郎  福岡  205 山田花子  京都 のような表があって H20と21で重複する人を別表に抽出したり、逆に重複しない人を抽出するにはどのような関数を使えばいいのでしょうか? よろしくお願いします

  • SQLのテーブル結合

    SQLのSELECTについて質問です。 テーブルA、B、Cから情報を取得し、下記の画面イメージを表示させたいのですが、 どのようにテーブルを結合すればよいか判りません。 どなたかご教示ください・・・。よろしくお願いします。 #テーブルCから組名を取得するような処理は画面表示のロジックで行います。 #テーブルA、Bの結合についてのみ、教えていただきたいです。 条件 ・氏名と、所属情報の○×を表示したい ・DISTINCT等、重たい処理は避けたい 画面イメージ |氏名  |赤組|白組|青組| ------------------------------ |山田太郎|○ |× |× | |山田花子|× |○ |○ | テーブルA |個人ID|氏名  | -------------------- |000001|山田太郎| |000002|山田花子| テーブルB |個人ID|組コード| -------------------- |000001|1110  | |000002|1111  | |000002|1112  | テーブルC |組コード|組名| ------------------ |1110  |赤組| |1111  |白組| |1112  |青組|