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

ORA-00937报错修复:含聚合函数的CASE语句分组问题

修复ORA-00937和ORA-00934错误的方案

错误原因分析

  1. ORA-00937:你的SQL中使用了SUM聚合函数,但同时引用了ITM2.UNIT_OF_ISSUE、UOM2.CONVERSION_RATE等非聚合列,Oracle要求所有非聚合列必须出现在GROUP BY子句中,否则无法确定聚合计算的分组依据。
  2. ORA-00934:你尝试将包含SUM的整个CASE表达式加入GROUP BY,但GROUP BY不允许包含聚合函数,只能使用原始列或基于原始列的非聚合表达式。

额外逻辑问题提醒

注意CASE的ELSE分支SUM(ITM2.PRIMARY_UOM_CODE):PRIMARY_UOM_CODE是单位编码(通常为字符串类型),对其使用SUM函数逻辑无效,建议替换为实际需要聚合的数值字段(比如IOQD.PRIMARY_TRANSACTION_QUANTITY)。

修正后的SQL示例

SELECT 
    CASE 
        WHEN ITM2.UNIT_OF_ISSUE IS NOT NULL 
        THEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) / UOM2.CONVERSION_RATE
        -- 替换为合理的数值字段求和,此处示例用IOQD的主交易数量
        ELSE SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) 
    END AS ONHAND_QTY
FROM EGP_SYSTEM_ITEMS ITM2
JOIN INV_ONHAND_QUANTITIES_DETAIL IOQD 
    ON IOQD.INVENTORY_ITEM_ID = ITM2.INVENTORY_ITEM_ID 
    AND IOQD.ORGANIZATION_ID = ITM2.ORGANIZATION_ID
-- 使用LEFT JOIN保留UNIT_OF_ISSUE为空的记录,否则这类数据会被过滤
LEFT JOIN inv_uom_conversions UOM2 
    ON UOM2.INVENTORY_ITEM_ID = ITM2.INVENTORY_ITEM_ID 
    AND UOM2.UOM_CODE = ITM2.UNIT_OF_ISSUE
-- 将所有非聚合列加入GROUP BY
GROUP BY ITM2.UNIT_OF_ISSUE, UOM2.CONVERSION_RATE

关键修正点

  • 改用JOIN语法替代旧式逗号连接,逻辑更清晰,同时用LEFT JOIN确保UNIT_OF_ISSUE为空的记录不会被过滤。
  • 将CASE中用到的所有非聚合列(ITM2.UNIT_OF_ISSUE、UOM2.CONVERSION_RATE)加入GROUP BY子句。
  • 修正ELSE分支的无效聚合逻辑,替换为合理的数值字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:45:25