You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:57:03