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

Oracle存储过程中GROUP BY函数报错ORA-00904问题求助

问题分析与解决

错误原因

  1. GROUP BY位置错误:第一个查询用到了SUM()聚合函数,必须搭配GROUP BY子句,但你把GROUP BY写在了MINUS后的第二个查询末尾——第二个查询没有聚合逻辑,完全不需要GROUP BY。
  2. 引用无效列:TFC.OFFERED_DATE是你给TFC.CREATED_DATE起的别名,GROUP BY不能直接用别名,必须用表的实际列名;而且第二个查询的表别名是BB,根本不能引用TFC的字段。
  3. 冗余的DISTINCT:使用聚合函数+GROUP BY时,DISTINCT是多余的,GROUP BY本身就会完成分组去重。

修正后的SQL语句

SELECT TO_CHAR(TFC.SPANID),
       TO_CHAR(TFC.MZ_CODE) AS MAINT_ZONE_CODE,
       TO_CHAR(TFC.MZ_NAME) AS MAINT_ZONE_NAME,
       SUM(TFC.MHO_HANDOVER_CERT) AS NE_LENGTH,
       TFC.CREATED_DATE AS OFFERED_DATE
FROM APP_LCO.tbl_fip_checklist TFC
WHERE LENGTH(TRIM(TFC.SPANID)) > 8
  AND LENGTH(TRIM(TFC.SPANID)) < 21
  AND TFC.STATUS = 'APPROVED'
GROUP BY TFC.SPANID, TFC.MZ_CODE, TFC.MZ_NAME, TFC.CREATED_DATE
MINUS
SELECT TO_CHAR(BB.LINK_ID) AS SPAN_ID,
       TO_CHAR(BB.MAINTENANCEZONECODE) AS MAINT_ZONE_CODE,
       TO_CHAR(BB.MAINTENANCEZONENAME) AS MAINT_ZONE_NAME,
       BB.MAINT_ZONE_NE_SPAN_LENGTH AS NE_LENGTH,
       BB.CREATED_DATE
FROM TBL_FIBER_INV_JOBS BB
WHERE BB.SPAN_TYPE = 'INTRACITY';

关键调整说明

  • 将GROUP BY移至第一个查询末尾,对应所有非聚合字段(SPANID、MZ_CODE、MZ_NAME、CREATED_DATE)。
  • 把GROUP BY中的TFC.OFFERED_DATE替换为实际列TFC.CREATED_DATE。
  • 移除第一个查询中的DISTINCT,避免与GROUP BY逻辑冲突。
  • 第二个查询无需GROUP BY,保留原有结构即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:31:11