1

基准数据库将问卷问题存储在一个表中,参与者对这些问题的回答存储在另一个表中。每年都会创建新表格,并且多年来,问题 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 映射它们

4

0 回答 0