SQL如何将同ID多行数据聚合为单行并拆分answer为多列
SQL行转列问题解决方案
问题原因
你编写的原始查询没有添加聚合分组逻辑,会逐行判断条件:每一行仅能匹配一个question_id的判断规则,因此另一列会返回空值,也无法实现同id多行合并的效果。
调整后SQL写法
通用兼容写法(支持所有主流SQL数据库)
使用聚合函数包裹CASE表达式,最后按id分组即可:
SELECT id, MAX(CASE WHEN question_id = 123 THEN answer END) AS answer1, MAX(CASE WHEN question_id = 456 THEN answer END) AS answer2 FROM test_data GROUP BY id
注:此处用MIN()替代MAX()也可得到相同结果,因为同一个id、同一个question_id下仅对应唯一的answer值,聚合函数的作用是忽略NULL值、提取对应的有效值。
PIVOT语法写法(支持行转列语法的数据库可使用)
如果你用的数据库支持PIVOT语法,也可以用专用行转列写法,逻辑完全一致:
SELECT * FROM test_data PIVOT ( MAX(answer) FOR question_id IN (123 AS answer1, 456 AS answer2) )
注:不同数据库的PIVOT语法细节存在差异,可根据你使用的数据库类型做对应调整。
内容的提问来源于stack exchange,提问作者wizkids121
相关产品推荐
相关产品推荐

