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

Oracle SQL满足双条件求和及ORA-000936报错问题咨询

报错原因排查

你遇到的ORA-000936错误核心是GROUP BY子句与SELECT查询的非聚合列不匹配,具体问题有两个:

  • 你第二个UNION分支的SELECT列表里包含TRANSACTION_DATE、LOSS、NEWTOTALLOSSFLAG三个非聚合字段,但GROUP BY子句里只写了TRANSACTION_DATE、LOSSCATEGORYCODE,既缺少了必须包含的非聚合字段,还多了未出现在SELECT列表中的LOSSCATEGORYCODE字段,不符合Oracle SQL的分组语法要求。
  • 你给出的原始表字段名为Loss、Estimated_value、Average_value,如果代码中用到的NEWTOTALLOSSFLAG、ESTIMATEVOLUME等不是实际表字段的别名,也会触发语法错误。
修正后的实现代码

按照你给出的表结构和需求,以下是可直接运行的代码,保留了你之前的UNION逻辑同时修正了语法问题:

-- 保留Loss为Y的原始行
SELECT Transaction_date,
       Loss,
       Estimated_value,
       Average_value
FROM 你的实际表名
WHERE Loss = 'Y'

UNION ALL

-- 对Loss为N的行按交易日期分组求和
SELECT Transaction_date,
       Loss,
       SUM(Estimated_value) AS Estimated_value,
       SUM(Average_value) AS Average_value
FROM 你的实际表名
WHERE Loss = 'N'
GROUP BY Transaction_date, Loss
ORDER BY Transaction_date, Loss DESC;

说明:使用UNION ALL而非UNION,避免不必要的去重操作,执行效率更高,符合你的需求场景。

结果验证

上述代码执行后会完全匹配你给出的预期结果:

  • 19960105日期下Loss=N的Estimated_value求和结果为230405.34 + 755443.467 = 985848.807,Average_value求和结果为453835.53 + 59694.43 = 513529.96
  • 19970107日期下Loss=N的Estimated_value求和结果为45345354.35 + 3453500.234 = 48798854.584,Average_value求和结果为79594.246 + 83674.342 = 163268.588

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 15:06:03