如何扩展SQL查询以合并相同FormularId的行?
问卷数据查询合并需求
需求背景
我正在开发一个问卷应用,包含以下问题:
- 输入月份
- 咨询类型(电话、面谈等)
- 通话时长
- 直属主管
- 学习状态
- 所属机构(标记星号为需提取的核心字段)
- 学习项目
- 主题/类别(标记星号为需提取的核心字段)
需要从数据库的QuestionAnswer表中提取这两个带星号问题的答案,并整理成指定格式。
现有表结构
QuestionAnswer表的结构及部分数据如下:
| 序号 | QuestionAnswerId | QuestionId | AnswerOptionId | FormularId |
|---|---|---|---|---|
| 1 | 109 | 2 | 1 | 27 |
| 2 | 110 | 3 | 4 | 27 |
| 3 | 111 | 2 | 1 | 27 |
| 4 | 112 | 3 | 4 | 27 |
| 5 | 113 | 2 | 1 | 27 |
| 6 | 114 | 3 | 4 | 27 |
| 7 | 115 | 2 | 1 | 27 |
| 8 | 123 | 3 | 4 | 29 |
| 9 | 124 | 2 | 1 | 29 |
| 10 | 125 | 3 | 4 | 29 |
| 11 | 126 | 2 | 1 | 29 |
| 12 | 127 | 3 | 4 | 29 |
| 13 | 128 | 2 | 1 | 29 |
| 14 | 129 | 3 | 4 | 29 |
| 15 | 130 | 2 | 1 | 30 |
| 16 | 131 | 3 | 4 | 30 |
已编写的查询语句
我已经写出筛选目标数据的SQL,仅获取QuestionId = 6(对应所属机构)、QuestionId = 8(对应主题/类别)的记录,且AnswerOptionId符合指定范围:
SELECT * FROM QuestionAnswer WHERE (QuestionId = 6 AND AnswerOptionId BETWEEN 13 AND 17) OR (QuestionId = 8 AND AnswerOptionId BETWEEN 69 AND 89) ORDER BY FormularId
当前查询结果
执行上述语句后得到的结果:
| 序号 | QuestionAnswerId | QuestionId | AnswerOptionId | FormularId |
|---|---|---|---|---|
| 1 | 290 | 6 | 15 | 52 |
| 2 | 292 | 8 | 78 | 52 |
| 3 | 347 | 6 | 15 | 61 |
| 4 | 349 | 8 | 80 | 61 |
| 5 | 354 | 6 | 15 | 62 |
| 6 | 356 | 8 | 87 | 62 |
期望结果格式
希望将相同FormularId的行合并为一行,得到如下格式:
| 序号 | QuestionId | AnswerOptionId | QuestionId | AnswerOptionId | FormularId |
|---|---|---|---|---|---|
| 1 | 6 | 15 | 8 | 78 | 52 |
| 2 | 6 | 15 | 8 | 80 | 61 |
| 3 | 6 | 15 | 8 | 87 | 62 |
问题
如何扩展上述查询语句,实现将相同FormularId的行合并为一行?
内容的提问来源于stack exchange,提问作者Maria Gath
相关产品推荐
相关产品推荐

