こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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)の所属、氏名を表示させる方法はどのようにしたらよろしいでしょうか。

どうかよろしくお願い致します。

投稿日時 - 2009-11-20 13:49:35

QNo.5462416

困ってます

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

#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;


当然ながら、二つのテーブルを作成し、「ツール」⇒「リレーションシップ」内であえて設定をせずに、サンプルのクエリ内での設定を行うだけで、実現可能です。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-11-21 04:45:18

お礼

ありがとうございました。参考になりました。とてもわかりやすく教えていただいて助かりました。おかげさまで解決できました!

投稿日時 - 2009-11-25 10:29:36

ANo.5

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

社員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です。

投稿日時 - 2009-11-21 03:30:57

お礼

ありがとうございました。参考になりました。おかげさまで解決できました!

投稿日時 - 2009-11-25 10:29:01

ANo.3

以下参考になりませんか

複数条件の抽出SQL文がわかりません
http://oshiete1.goo.ne.jp/qa5427436.html

投稿日時 - 2009-11-20 16:19:13

お礼

ありがとうございました。参考になりました。おかげさまで解決できました!

投稿日時 - 2009-11-25 10:28:37

ANo.2

>社員NO1(T2)の所属(T1)氏名(T1)、しか表示されません

>社員NO1,2,3,4はテーブル1の社員NOとリレーションでつながっています。

⇒リレーションの設定に問題があるのかも?
「社員1234」のそれぞれに対して、T1が接続されていないのではありませんか?
社員1だけに接続して、「全部に対して有効になっている」と誤った理解をしていることも予想できます。
失礼な指摘で恐縮ですが、リレーションの設定自体に誤った理解がないとも言い切れません。(自己申告の知識なので、こちらでは確認する術がないため。)

⇒クエリで項目選択する際、社員234の所属&氏名の項目を「それぞれに」指定していないのでは?
上記同様の理由から、データ抽出用のクエリが、表示させたい項目を全て選択できていないとも予測できます。

社員1の所属&氏名までは表示できているのでしたら、社員2以降をその社員1と「全て同じ設定状態」にすることで、リレーションされたテーブルから所属&氏名の情報を持ってくることが可能なはずです。


残念ですが、正常に動作しないと説明している「具体的な設定・作成」の状態が不明なので、改善点の指摘が出来ません。

ご自身が説明している内容(=漠然)を読む限り、問題点はピンポイントな部分だけの気がしますが、ボリュームのある実際の状態を確認できないと、その点の指摘は困難だと考えます。

投稿日時 - 2009-11-20 15:12:12

補足

ご指摘ありがとうございます。
リレーションですが、

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のデータの所属と氏名だけ表示されます。

これでは思い通りのものは作成できないですか?
何か良いアドバイスをくださいませんか?
すみませんがよろしくお願い致します。

投稿日時 - 2009-11-20 16:35:27

ANo.1

T2の作り方が間違ってます。

(T2)テーブル2(面談データ)
NO オートナンバー
社員NO 数値型
日付 日付/時刻型
面談者氏名 テキスト型
面談者企業名 テキスト型

として、誰の面談であるかは社員NO(T2)で管理。
T1のサブフォームにT2(社員NOで連結)。レポートも同様で。

余談でサブフォームのフィールドをコンボボックスにして、データソースに列数3、連結列3、列幅0;0;2cmとすれば
社員NO(T2)の入力を数値ではなく名前で入力できるようにもなります(テーブルに入るデータは数値)。

投稿日時 - 2009-11-20 14:49:02

補足

ありがとうございます。
作成してみました。

1つの面談に対して社員が1~4人担当をするという作り方をしたいです。
私の説明不足です。すみません。

良いアドバイスがありましたらよろしくお願い致します。

投稿日時 - 2009-11-20 16:54:57

あなたにオススメの質問