我正在努力解决为什么下面注释掉的代码 (
AND ESIB.UNIT_OF_ISSUE IS NULL
) 会出现错误 - ORA-00979: not a GROUP BY expression
当我在 CASE
语句中取消注释这个附加条件时。 UNIT_OF_ISSUE
和PRIMARY_UOM_CODE
都是String类型的字段。如果我只使用 WHEN ESIB.PRIMARY_UOM_CODE = 'EA'
就可以了,所以我不明白为什么 AND...
条件会导致问题。
我知道我可以将整个 case 表达式添加到 GROUP BY,但我想看看这里是否还有其他选项,以及为什么会这样。
SELECT ESIB.ITEM_NUMBER,
ESIT.LONG_DESCRIPTION,
IOP.ORGANIZATION_CODE,
isub.secondary_inventory SUBINVENTORY_CODE,
CASE WHEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) IS NULL
THEN 0
WHEN ESIB.PRIMARY_UOM_CODE = 'EA' --AND ESIB.UNIT_OF_ISSUE IS NULL
THEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY)
ELSE SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) / INTRACONV.CONVERSION_RATE
END ONHAND_QTY
,ESIB.PRIMARY_UOM_CODE ONHAND_UOM
FROM EGP_SYSTEM_ITEMS_B ESIB
INNER JOIN EGP_SYSTEM_ITEMS_TL ESIT
ON ESIB.INVENTORY_ITEM_ID = ESIT.INVENTORY_ITEM_ID
AND ESIB.ORGANIZATION_ID = ESIT.ORGANIZATION_ID
INNER JOIN INV_ORG_PARAMETERS IOP
ON ESIB.ORGANIZATION_ID = IOP.ORGANIZATION_ID
AND INVENTORY_FLAG = 'Y'
AND isub.organization_id = iop.organization_id
GROUP BY
ESIB.ITEM_NUMBER,
ESIT.LONG_DESCRIPTION,
IOP.ORGANIZATION_CODE,
isub.secondary_inventory,
ESIB.PRIMARY_UOM_CODE,
INTRACONV.CONVERSION_RATE
INTRACONV.CONVERSION_RATE
不在GROUP BY
子句中:
一些选项是:
在
INTRACONV.CONVERSION_RATE
子句中添加GROUP BY
。
将
INTRACONV.CONVERSION_RATE
部门移动到SUM
聚合:
CASE
WHEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) IS NULL
THEN 0
WHEN ESIB.PRIMARY_UOM_CODE = 'EA'
--AND ESIB.UNIT_OF_ISSUE IS NULL
THEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY)
ELSE SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY / INTRACONV.CONVERSION_RATE)
END AS ONHAND_QTY
将
INTRACONV.CONVERSION_RATE
包裹在不同的聚合函数中(例如MAX
、MIN
、AVG
等):
CASE
WHEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) IS NULL
THEN 0
WHEN ESIB.PRIMARY_UOM_CODE = 'EA'
--AND ESIB.UNIT_OF_ISSUE IS NULL
THEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY)
ELSE SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY)
/ MAX(INTRACONV.CONVERSION_RATE)
END AS ONHAND_QTY