• ベストアンサー

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

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

  • ベストアンサー
  • mhassy
  • ベストアンサー率43% (16/37)
回答No.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; 当然ながら、二つのテーブルを作成し、「ツール」⇒「リレーションシップ」内であえて設定をせずに、サンプルのクエリ内での設定を行うだけで、実現可能です。

usatti
質問者

お礼

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

その他の回答 (4)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.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です。

usatti
質問者

お礼

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

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

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

usatti
質問者

お礼

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

  • mhassy
  • ベストアンサー率43% (16/37)
回答No.2

>社員NO1(T2)の所属(T1)氏名(T1)、しか表示されません & >社員NO1,2,3,4はテーブル1の社員NOとリレーションでつながっています。 ⇒リレーションの設定に問題があるのかも? 「社員1234」のそれぞれに対して、T1が接続されていないのではありませんか? 社員1だけに接続して、「全部に対して有効になっている」と誤った理解をしていることも予想できます。 失礼な指摘で恐縮ですが、リレーションの設定自体に誤った理解がないとも言い切れません。(自己申告の知識なので、こちらでは確認する術がないため。) ⇒クエリで項目選択する際、社員234の所属&氏名の項目を「それぞれに」指定していないのでは? 上記同様の理由から、データ抽出用のクエリが、表示させたい項目を全て選択できていないとも予測できます。 社員1の所属&氏名までは表示できているのでしたら、社員2以降をその社員1と「全て同じ設定状態」にすることで、リレーションされたテーブルから所属&氏名の情報を持ってくることが可能なはずです。 残念ですが、正常に動作しないと説明している「具体的な設定・作成」の状態が不明なので、改善点の指摘が出来ません。 ご自身が説明している内容(=漠然)を読む限り、問題点はピンポイントな部分だけの気がしますが、ボリュームのある実際の状態を確認できないと、その点の指摘は困難だと考えます。

usatti
質問者

補足

ご指摘ありがとうございます。 リレーションですが、 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)
回答No.1

T2の作り方が間違ってます。 (T2)テーブル2(面談データ) NO オートナンバー 社員NO 数値型 日付 日付/時刻型 面談者氏名 テキスト型 面談者企業名 テキスト型 として、誰の面談であるかは社員NO(T2)で管理。 T1のサブフォームにT2(社員NOで連結)。レポートも同様で。 余談でサブフォームのフィールドをコンボボックスにして、データソースに列数3、連結列3、列幅0;0;2cmとすれば 社員NO(T2)の入力を数値ではなく名前で入力できるようにもなります(テーブルに入るデータは数値)。

usatti
質問者

補足

ありがとうございます。 作成してみました。 1つの面談に対して社員が1~4人担当をするという作り方をしたいです。 私の説明不足です。すみません。 良いアドバイスがありましたらよろしくお願い致します。

関連するQ&A

  • アクセスのクエリについて

    1.以下の二つのテーブルを作成しました。 ・テーブル1  case_no:数値型  ap_no:テキスト型  ap_date:日付型  kanriID:数値型 ・テーブル2  kanriID:数値型  F_name:テキスト型 2.上記した二つのテーブルの「KanriID」をリレーションシップして、 さらに、下記の項目をピックアップした選択クエリを作成しました。  case_no ap_no ap_date kanriID(テーブル1)  F_name 3.上記のクエリを基に、ウィザードを利用して単票フォームを作成したのですが、データの更新ができないフォームが出来上がってしまいました。  どうしたら、データの更新ができるようになるのでしょうか?

  • Accessのマクロ

    Access2002で、「氏名(テーブル名:name)」と「日付<○月○日~○月○日>(テーブル名:date)」でレポート内容が検索できるのを作っています。 フォームに 氏名一覧、日付入力、検索ボタン、最新データの取り込みボタン を作っています。 「検索」の方は出来たのですが、「最新データ取り込み」をしようとすると、 『テーブル'name'は現在ほかのユーザまたはプロセスで使用されているので、ロックできませんでした』というエラーメッセージがでてきます。 「最新データ取り込み」ボタンに対してのマクロのアクションは、 オブジェクトの削除…テーブル/report テキスト変換…reportインポート定義 オブジェクトの削除…テーブル/name クエリを開く…name作成(テーブル作成クエリ) としています。 (「マクロの実行」で指定) フォームに表示されている氏名(name)を削除しようとしているために、このようなエラーメッセージが出ているのかとも思っていますが…。 フォームを閉じずに、「最新データ取り込み」ができないものでしょうか? ご教示の程、よろしくお願いします。

  • Yes/No型のデータ抽出

    Access97で出面管理(出勤簿)を作成しています。 レポートを印刷する際請求を出す都合上、自社社員分と応援社員分とを分けるため社員名と所属が自社か応援かを分けるためのテーブルを作成しました。 その分類方法はYes/No型(True=応援社員、False=自社社員)に設定しました。 その際、氏名を選択すると自動で自社/応援かが認識できるようにしました。 その後、必要なテーブル・クエリー等を設定し、フォームから入力してみると 自社社員としてしか認識しません。 そこで該当するテーブルから入力(氏名=テキスト型・自社/応援=Yes/No型 チェックボックスONで応援扱い)するとフォーム・レポートでも 認識してくれます。 しかしこの方法では毎日同じ応援社員がいた場合その都度チェックボックスを Onにしなければならず非常に厄介です。 しかもデータが毎日蓄積されるのでしばらく入力を忘れたりするとそれこそ手間がかかってしまいます。 どのように設定(テーブル・クエリー・リレーション等)を変更してやれば 良いのかアドバイスお待ちしております。 ちなみに現時点ではフォームから入力する際、氏名をコンボボックスで選択でき その後連動して所属が決定するようになってます。

  • Access2000で複数の検索項目を作りたいのですが・・・

    こんにちわ。 今、Accessで社員録を作成しているんですが、複数の検索について教えて下さい。 ■テーブル テーブル名:社員録 フィールド名:ID・検索名・氏名・所属ID・所属 ■クエリ クエリ名:社員録クエリ フィールド名:ID・検索名・氏名・所属ID・所属 検索名抽出条件:検索名フィールド: Like [Forms]![社員録 縦]![けんさく]         所属フィールド: Like [Forms]![社員録 縦]![抽出検索名] ■フォーム フォーム名:社員録フォーム:テキスト1・テキスト2・ボタン1       社員録サブフォーム:データソース:社員録クエリ テキスト1:所属を入力 テキスト2:検索名を入力 ボタン1:マクロの再クエリを実行する ■ここからが質問です■ (1)テキスト1又は、2が空白のとき社員録全体から検索かフィルタ。 (2)テキスト1・2が、入力されてる時、両条件から検索かフィルタ。 をしたいのですが、何かいい方法がありましたら教えて下さい。 説明が、長くなってしまってスミマセン。。。

  • アクセス2007 レポートで表示されないデータ

    アクセス2007を使い始めた初心者です。よろしくお願いします。 研究のための1000件ほどのデータのテーブルを元にクエリを作成しました。 そのクエリをレコードソースとしてレポートを作成しました。 ところが、表示されないデータがあります。 同じ数値のデータは表示されていません。 クエリを開いて確認すると、全てのデータが表示されていることは確認できました。 表示されないテキストボックスのプロパティを見ると「重複データの非表示」は「いいえ」になっています。  AAA XXX XXX        AAA XXX XXX  AAA XXX XXX   >>>   BBB XXX XXX  BBB XXX XXX                    どのようにしたら、全てのデータをレポートに表示させることが出来ますか。

  • アクセスレポートの抽出表示

    アクセス初心者です。よろしくお願いします。 現在3つのテーブルデータをクエリで結合し、レポートに表示させています。(フォームは使ったことがありません) 内容をレポートで確認したりしたいのですが、その都度クエリで社員番号を抽出条件に入力し、レポートを表示させているのですが、社員番号を入力すると該当のレポートを表示させる方法は何かないでしょうか?

  • Access2010 更新データのレポート表示

    Access初心者です。 新規データを入力しても、レポートが更新されずに困っています。 (テーブルや、フォーム内では、データは更新されています) エクセルデータをAccess2010にインポートして、元テーブルを作成しました。 元テーブルを元に、フォーム・レポート・検索クエリ(年度別・分類別)等を作成しました。 ここまでの作業で、新規データの入力はありませんでした。 ところが・・・ 新規データをフォームに入力すると、元テーブルは更新されますが、既に作成しているレポートには、新規レコードが表示(反映)されません。 更新されている元テーブルを元に、もう一度レポートを作成しても、新規レコードは表示されません。 ホームタブの「全て更新」ボタンをクリックしても、新規レコードはレポートには表示されません。 尚、Access初心者です。 「更新クエリ」なるものは、作成していません。というか、「更新クエリ」って何?状態です。 また、クエリそのものが良くわかっておらず、作成したクエリは全て「検索」のためのクエリで、抽出条件に「 [] 」を入力したり、フィールドに「 年度: Year(DateAdd("m",-3,[発送日])) 」を入力したりしかできません。 勿論、リレーションシップって何???状態です。 どうしたらよいのでしょうか??? どなたか、初心者でもわかるように、教えていただけないでしょうか? 宜しくお願いいたします。

  • アクセス2000でクエリにデータ追加ができる表示がでません

    アクセス2000で、氏名と性別コード(1or2)のあるテーブルを作りました。 性別を漢字で表示したいので、1=男、2=女というべつのテーブルを作って リレーションシップを設定しようとして、氏名と性別コードのあるテーブルを もとにクエリを作成して、1=男、2=女というテーブルを表示したところ、 クエリにデータ追加ができる表示がでなくなりました。 また、そのクエリをもとに、フォームを作ったら、性別コードの部分が「この データは更新できません」というようなメッセージが出て、データの修正も、 できません。 どうしてでしょう? どうしたら、解決するでしょうか?

  • ACCESS2000で小数点以下を表示したい

    ACCESS2000で小数点以下を表示したい 検診データのうちある異常値の数値だけを表示したいのです. しかもその数値が例えば6.0だったら小数点1桁まで表示したいのです. クエリでIIF関数を使って空白にするか表示するかを設定すると その数値のデータ型が数値型とならずプロパティの書式を0.0としても 効きません. データ作成クエリとしてテーブルに書き出して、レポートのソースを そのテーブルにしてみたのですが、その時点での数値がテキスト型 となってしまい、その都度数値型に変更しなければならず、汎用性が ありません.テーブル作成クエリで作成するテーブルのデータ型をあらかじめ 設定する方法はないでしょうか? それとも他によい方法はないでしょうか? あいにくVBAレベルになると知識がなくさっぱりわかりません。

  • Access2000 / 「レコードを追加できません」

    こんにちは Access2000で困っております。 簡単にいいますと、フォーム上から日付/時刻型のデータを入力しようとしても 「レコードを追加できません、テーブル’T外部集計警備’の結合キーがレコードセットにありません。」と表示されうまく入りません。 テーブルの構成ですが、 ★が主キー (1)T現場台帳 ★NO(オートナンバー型) 現場記号(テキスト型) ・ ・ 省略 (2)T外部集計警備 ★NO(オートナンバー型) 現場記号(テキスト型) 警備依頼日付(日付/時刻型) 警備会社ID(数値型) 集計人数(数値型) (3)T警備会社 ★警備会社ID 警備会社名(テキスト型) ・ ・ 省略 上記テーブルはリレーションがかかっており、 (1)T現場台帳.現場記号(テキスト型)----(2)T外部集計警備.現場記号(テキスト型) (2)T外部集計警備.警備会社ID(数値型)---(3)T警備会社.★警備会社ID それぞれ、参照整合性のついたリレーションです。 更にこれらをまとめるために、Q警備会社集計クエリ(選択クエリ)をつくりフォームに利用しています。 Q警備会社集計クエリの構成 T現場台帳.担当者ID T外部集計警備.警備依頼日付 T外部集計経緯日.警備会社ID T警備会社.警備会社名 T外部集計警備.集計人数 (並べ替えや絞込みは、なし) この「Q警備会社集計クエリ」を使って フォームからウイザードを使用してフォームを作成し、警備依頼日付を入力しようとすると「レコードを追加できません、テーブル’T外部集計警備’の結合キーがレコードセットにありません。」と表示されます。 どなたか、Accessの痒いところまで手の届く方、お助けください。