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

Oracle SQL无聚合GROUP BY实现同EMPNO行转列数据合并

Oracle SQL 实现同一EMPNO多行非数值字段合并为一行

你可以通过聚合函数+GROUP BY的方式解决这个问题,非数值型字段同样可以使用MAX()或MIN()这类聚合函数提取有效非NULL值,具体修改后的SQL如下:

首先修正原语句的语法错误(CASE语句间缺少逗号),并添加聚合与分组逻辑:

SELECT EMPNO,
       MAX(CASE WHEN "GROUP" = 'Intro' THEN Role END) AS "Intro",
       MAX(CASE WHEN "GROUP" = 'Compliance' THEN Role END) AS "Compliance",
       MAX(CASE WHEN "GROUP" = 'Security' THEN Role END) AS "Security",
       MAX(CASE WHEN "GROUP" = 'Project' THEN Role END) AS "Project",
       MAX(CASE WHEN "GROUP" = 'Role Based' THEN Role END) AS "Role Based"
FROM EMP_TBL
GROUP BY EMPNO;

关键说明:

  1. MAX()函数会自动忽略NULL值,对于同一EMPNO下的每个Training分组,只会保留唯一的非NULL Role值,从而将多行数据合并为一行。
  2. GROUP是Oracle的关键字,必须用双引号"GROUP"引起来,避免语法报错。
  3. 如果需要保留ICODE和Type字段,且同一EMPNO对应的这两个字段值唯一,可将它们加入GROUP BY子句:
SELECT EMPNO,
       ICODE,
       Type,
       MAX(CASE WHEN "GROUP" = 'Intro' THEN Role END) AS "Intro",
       MAX(CASE WHEN "GROUP" = 'Compliance' THEN Role END) AS "Compliance",
       MAX(CASE WHEN "GROUP" = 'Security' THEN Role END) AS "Security",
       MAX(CASE WHEN "GROUP" = 'Project' THEN Role END) AS "Project",
       MAX(CASE WHEN "GROUP" = 'Role Based' THEN Role END) AS "Role Based"
FROM EMP_TBL
GROUP BY EMPNO, ICODE, Type;

若同一EMPNO下的ICODE或Type存在多个不同值,需根据业务需求选择合适的聚合函数(如MAX()、MIN())来统一结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:00:55