Oracle select查询如何实现同分组下多行值合并为单行输出
解决方案
你需要对CASE表达式的返回结果做聚合,搭配GROUP BY place按地点分组即可合并同一地点的多行数据,过滤空值得到你期望的结果。
调整后的SQL语句如下:
SELECT place, MAX(CASE WHEN type = 'TYPE_A' THEN stage END) AS type_A, MAX(CASE WHEN type = 'TYPE_B' THEN stage END) AS type_B FROM table WHERE place LIKE '%AFA%' GROUP BY place
原理解释
你原有的写法没有加分组逻辑,每行原始数据只会匹配一个CASE条件的返回值,另一个字段就会返回空值。聚合函数MAX会自动忽略NULL值,每个place下对应类型的stage只有一个有效值,聚合后就能提取到对应的非空值,再通过GROUP BY place分组,最终每个地点仅返回一行结果。
如果你的Oracle版本为11g及以上,也可以使用专门的行转列PIVOT语法实现,写法更直观:
SELECT * FROM ( SELECT place, stage, type FROM table WHERE place LIKE '%AFA%' ) PIVOT ( MAX(stage) FOR type IN ('TYPE_A' AS type_A, 'TYPE_B' AS type_B) )
内容的提问来源于stack exchange,提问作者Jovani
相关产品推荐
相关产品推荐

