ベンチマーク データベースでは、アンケートの質問を 1 つのテーブルに格納し、それらの質問に対する参加者の回答を別のテーブルに格納します。毎年、新しいテーブルが作成され、何年にもわたって質問 ID が変更されました。そのため、質問 ID が一致しなくなったため、すべての年にわたるすべての回答を結合した 1 つのテーブルを生成することが困難になりました (たとえば、2010 年の質問「材料費」の質問 ID は「bp2.12」でしたが、2011 年のベンチマークでは新しい問題が追加されたため、問題ID「bp2.16」になりました)。ただし、質問テーブルには、古い質問 ID へのマッピングも格納されます。
正しいマッピングを使用して、2 年間のすべての参加者のすべての応答を含むテーブルを生成する SQL クエリ (MS Access SQL) はどれですか?
ベース テーブル (サンプル データあり):
- tbl_questions_2010: ID | 質問文 | 単位
- bp2.12 | 材料費 | 米ドル
- bp2.13 | 人件費 | 米ドル
- bp2.14 | 正社員 | 工数
- ...
- tbl_questions_2011: ID | 質問文 | ユニット | 2010_ID
- bp2.16 | 材料費 | 米ドル | bp2.12
- bp2.20 | 人件費 | 米ドル | bp2.13
- bp2.21 | 正社員 | 正社員 | bp2.14
- tbl_responses_2010: ID | 質問ID | 参加者 ID | 応答
- 1 | bp2.12 | 1 | 2,289,990
- ...
- tbl_responses_2011: ID | 質問ID | 参加者 ID | 応答
- 78 | bp2.16 | 3 | 723,091
- ...
- tbl_participants: ID | 参加者名
- 1 | 株式会社アクメ
- 3 | ジョン・ドゥ・グループ
望ましい結果 (サンプル データを使用):
- tbl_result: 質問 ID | 年 | 質問文 | 参加者名 | 応答
- bp2.16 | 2012年 | 材料費 | アクメ株式会社 | 2,289,990
- bp2.16 | 2010年 | 材料費 | ジョン・ドゥ・グループ | 723,091
- ...
これは私がこれまでに持っているものです:
SELECT tbl_responses_2010.question_ID_2010 AS Question_ID, "2010" as Year, tbl_questions_2010.questiontext, tbl_participants.participant_name, tbl_responses_2010.response
FROM tbl_responses_2010, tbl_questions_2010, tbl_participants
WHERE tbl_responses_2010.participant_ID=tbl_participants.participant_ID AND tbl_questions_2010.question_ID_2010=tbl_responses_2010.question_ID_2010
UNION
SELECT tbl_responses_2011.question_ID_2011 AS Question_ID, "2011" as Year, tbl_questions_2011.questiontext, tbl_participants.participant_name, tbl_responses_2011.response
FROM tbl_responses_2011, tbl_questions_2011, tbl_participants
WHERE tbl_responses_2011.participant_ID=tbl_participants.participants_ID AND tbl_questions_2011.question_ID_2011=tbl_responses_2011.question_ID_2011
ORDER BY Question_ID, response, Year;
これにより、2011 年と 2011 年のすべての回答を結合したテーブルが得られますが、2010 年の質問の質問 ID が間違っています。フィールド tbl_questions_2011.2010_ID を使用してそれらをマッピングする方法がわかりません