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

如何在Oracle SQL中转置结果:一个唯一ID对应非空列单行展示

Oracle SQL 合并同一unique_id的多行数据

直接用聚合函数+分组就能解决你的问题,修改后的SQL如下:

SELECT unique_id,
       MAX(CASE WHEN type LIKE 'E-%' THEN 'electric' END) AS electric_flag,
       MAX(CASE WHEN type LIKE 'G-%' THEN 'gas' END) AS gas_flag,
       MAX(CASE WHEN type LIKE 'W-%' THEN 'water' END) AS water_flag,
       MAX(CASE WHEN type LIKE 'S-%' THEN 'wastewater' END) AS wastewater_flag
FROM (SELECT unique_id, type, end_dt 
      FROM table 
      WHERE end_dt IS NULL) t
GROUP BY unique_id
HAVING MAX(CASE WHEN type LIKE 'E-%' THEN 'electric' END) IS NOT NULL
    OR MAX(CASE WHEN type LIKE 'G-%' THEN 'gas' END) IS NOT NULL
    OR MAX(CASE WHEN type LIKE 'W-%' THEN 'water' END) IS NOT NULL
    OR MAX(CASE WHEN type LIKE 'S-%' THEN 'wastewater' END) IS NOT NULL;

关键逻辑说明:

  • MAX()聚合函数:同一unique_id下,每个标志列只会有一个非空值(对应匹配的type),MAX()会自动忽略NULL,保留唯一的有效取值,从而把多行合并成一行。
  • GROUP BY unique_id:按unique_id分组,让同一ID的所有行参与聚合计算。
  • HAVING子句:过滤掉所有标志列都为NULL的分组,也就是没有匹配任何type规则的无效行,满足你“忽略全NULL行”的需求。

另外,原代码里的ELSE null可以省略,因为CASE表达式默认不匹配时就返回NULL,这样代码更简洁。

内容的提问来源于stack exchange,提问作者bmax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:06:27