基准数据库将问卷问题存储在一个表中,参与者对这些问题的回答存储在另一个表中。每年都会创建新表格,并且多年来,问题 ID 都会发生变化。因此,由于问题 ID 不再匹配(例如,在 2010 年,问题“材料成本”的问题 ID 为“bp2.12”,但在 2011研究它成为问题 ID“bp2.16”,因为添加了新问题)。但是,问题表还存储了到旧问题 ID 的映射。
什么 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 | ACME有限公司
- 3 | 约翰·多伊集团
期望的结果(带有样本数据):
- tbl_result: question_ID | 年份 | 问题文本 | 参与者姓名 | 回复
- bp2.16 | 2012 | 材料成本| ACME有限公司| 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 映射它们