- ベストアンサー
Accessで一致したデータを表示させたい
Accessについて教えてください。 Accessで以下のようなテーブルを作っております。 (T1)テーブル1(社員データ) 社員NO オートナンバー 所属 テキスト型 氏名 テキスト型 (T2)テーブル2(面談データ) NO オートナンバー 日付 日付/時刻型 面談者氏名 テキスト型 面談者企業名 テキスト型 社員NO1 数値型 社員NO2 数値型 社員NO3 数値型 社員NO4 数値型 社員NO1,2,3,4はテーブル1の社員NOとリレーションでつながっています。 (T1)社員NO、(T2)NO以外のデータを最終的にレポートで表示します。 ここで、クエリ、フォーム、レポートをいづれでも作成するときですが、 日付(T2) 面談者氏名(T2) 面談者企業名(T2) 社員NO(T1)(非表示) 社員NO1の所属(T1) 社員NO1の氏名(T1) 社員NO(T1)(非表示) 社員NO2の所属(T1) 社員NO2の氏名(T1)・・・(社員NO3、4と続けて) という風に作りたいです。 クエリ、フォーム、レポートで作成すると、社員NO1(T2)の所属(T1)氏名(T1)、しか表示されません。(これでは当たり前かもしれませんが・・・) 社員NO2、3、4の所属、氏名も表示させたいです。 フォームやクエリ、レポートで社員NO2、3、4(T2)のデータと一致する社員NO(T1)の所属、氏名を表示させる方法はどのようにしたらよろしいでしょうか。 どうかよろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2 再回答です。 要点だけで、サンプルを作りました。 サンプルでは、内容確認のために「社員NO」自体も入っていますが、 非表示でも項目無しでも同じ動作が可能です。(=所属&氏名のみ表示) また、面談者の氏名&企業名は、T2_面接 テーブルに項目追加すればよいです。 作成手順は・・・ クエリの画面で、面接用のテーブルにある各社員NOに対して、それぞれ社員テーブルをリンクさせます。 次に、「社員1」とつながった社員テーブル内の、所属&氏名をダブルクリック。 次に、「社員2」とつながった社員テーブル内の、所属&氏名をDクリック。 次に、(サンプルには社員NOもあるため)、それぞれの社員NOもDクリックです。 このクエリを、「SQLビュー」で表示させると、以下の内容になります。 SELECT T1_社員.所属, T1_社員.氏名, T1_社員_1.所属, T1_社員_1.氏名 FROM (T2_面接 INNER JOIN T1_社員 ON T2_面接.社員NO1 = T1_社員.ID) INNER JOIN T1_社員 AS T1_社員_1 ON T2_面接.社員NO2 = T1_社員_1.ID; 当然ながら、二つのテーブルを作成し、「ツール」⇒「リレーションシップ」内であえて設定をせずに、サンプルのクエリ内での設定を行うだけで、実現可能です。
その他の回答 (4)
- nda23
- ベストアンサー率54% (777/1416)
社員NOが4個あるのだから、T2にはT1を4個結合しなければなりません。 SELECT A.日付,A.面談者氏名,A.面談者企業名, B.所属 AS 所属1,B.氏名 AS 氏名1, C.所属 AS 所属2,C.氏名 AS 氏名2, D.所属 AS 所属3,D.氏名 AS 氏名3, E.所属 AS 所属4,E.氏名 AS 氏名4 FROM (((T2 AS A LEFT JOIN T1 AS B ON A.社員NO1=B.社員NO) LEFT JOIN T1 AS C ON A.社員NO2=C.社員NO) LEFT JOIN T1 AS D ON A.社員NO3=D.社員NO) LEFT JOIN T1 AS D ON A.社員NO4=E.社員NO T2の社員NO1~4が必ず全て設定されるのならINNER JOINでもOKです。
お礼
ありがとうございました。参考になりました。おかげさまで解決できました!
- 30246kiku
- ベストアンサー率73% (370/504)
以下参考になりませんか 複数条件の抽出SQL文がわかりません http://oshiete1.goo.ne.jp/qa5427436.html
お礼
ありがとうございました。参考になりました。おかげさまで解決できました!
- mhassy
- ベストアンサー率43% (16/37)
>社員NO1(T2)の所属(T1)氏名(T1)、しか表示されません & >社員NO1,2,3,4はテーブル1の社員NOとリレーションでつながっています。 ⇒リレーションの設定に問題があるのかも? 「社員1234」のそれぞれに対して、T1が接続されていないのではありませんか? 社員1だけに接続して、「全部に対して有効になっている」と誤った理解をしていることも予想できます。 失礼な指摘で恐縮ですが、リレーションの設定自体に誤った理解がないとも言い切れません。(自己申告の知識なので、こちらでは確認する術がないため。) ⇒クエリで項目選択する際、社員234の所属&氏名の項目を「それぞれに」指定していないのでは? 上記同様の理由から、データ抽出用のクエリが、表示させたい項目を全て選択できていないとも予測できます。 社員1の所属&氏名までは表示できているのでしたら、社員2以降をその社員1と「全て同じ設定状態」にすることで、リレーションされたテーブルから所属&氏名の情報を持ってくることが可能なはずです。 残念ですが、正常に動作しないと説明している「具体的な設定・作成」の状態が不明なので、改善点の指摘が出来ません。 ご自身が説明している内容(=漠然)を読む限り、問題点はピンポイントな部分だけの気がしますが、ボリュームのある実際の状態を確認できないと、その点の指摘は困難だと考えます。
補足
ご指摘ありがとうございます。 リレーションですが、 T2社員NO1⇔T1社員NO T2社員NO2⇔T1_2社員NO T2社員NO3⇔T1_3社員NO T2社員NO4⇔T1_4社員NO となっています。やはりおかしいでしょうか。 クエリで項目を選択する際、 日付(T2) 面談者氏名(T2) 面談者企業名(T2) 社員NO1(T1)(非表示) 社員NO1の所属(T1) 社員NO1の氏名(T1) 社員NO2(T1)(非表示) 社員NO2の所属(T1) 社員NO2の氏名(T1)・・・(社員NO3、4と続けて) このように作成すると、すべて表示されません。 日付(T2) 面談者氏名(T2) 面談者企業名(T2) 社員NO1(T2) 社員NO2(T2) 社員NO3(T2) 社員NO4(T2) 所属(T1) 氏名(T1) とすると社員NO1 社員NO1のデータの所属と氏名だけ表示されます。 これでは思い通りのものは作成できないですか? 何か良いアドバイスをくださいませんか? すみませんがよろしくお願い致します。
- kuroizell
- ベストアンサー率55% (95/170)
T2の作り方が間違ってます。 (T2)テーブル2(面談データ) NO オートナンバー 社員NO 数値型 日付 日付/時刻型 面談者氏名 テキスト型 面談者企業名 テキスト型 として、誰の面談であるかは社員NO(T2)で管理。 T1のサブフォームにT2(社員NOで連結)。レポートも同様で。 余談でサブフォームのフィールドをコンボボックスにして、データソースに列数3、連結列3、列幅0;0;2cmとすれば 社員NO(T2)の入力を数値ではなく名前で入力できるようにもなります(テーブルに入るデータは数値)。
補足
ありがとうございます。 作成してみました。 1つの面談に対して社員が1~4人担当をするという作り方をしたいです。 私の説明不足です。すみません。 良いアドバイスがありましたらよろしくお願い致します。
お礼
ありがとうございました。参考になりました。とてもわかりやすく教えていただいて助かりました。おかげさまで解決できました!