我的 SQL 查询当前是:
SELECT ARINVT.CLASS,
ARINVT.ITEMNO,
ARINVT.DESCRIP,
ARINVT.ONHAND,
CASE
WHEN DAY_USE_TOTAL.CUM_MAT_QTY IS NULL THEN 0
ELSE SUM (DAY_USE_TOTAL.TOT_MAT_QTY) END "Material Usage"
FROM IQMS.ARINVT ARINVT
LEFT JOIN IQMS.DAY_USE_TOTAL DAY_USE_TOTAL
ON ARINVT.ID = DAY_USE_TOTAL.ARINVT_ID
WHERE CLASS = 'PL'
GROUP BY ARINVT.ID,
ARINVT.CLASS,
ARINVT.ITEMNO,
ARINVT.DESCRIP,
ARINVT.ONHAND
ORDER BY ARINVT.ITEMNO
我当前收到错误ORA-00979:不是 GROUP BY 表达式
。
当我删除 case 语句并仅使用 SUM()
时:
SELECT ARINVT.CLASS,
ARINVT.ITEMNO,
ARINVT.DESCRIP,
ARINVT.ONHAND,
SUM (DAY_USE_TOTAL.TOT_MAT_QTY)
FROM IQMS.ARINVT ARINVT
LEFT JOIN IQMS.DAY_USE_TOTAL DAY_USE_TOTAL
ON ARINVT.ID = DAY_USE_TOTAL.ARINVT_ID
WHERE CLASS = 'PL'
GROUP BY ARINVT.ID,
ARINVT.CLASS,
ARINVT.ITEMNO,
ARINVT.DESCRIP,
ARINVT.ONHAND
ORDER BY ARINVT.ITEMNO
它工作得很好。为什么是这样?我认为这是因为 CASE
语句可以返回 0,这不适用于 GROUP BY
,但即使两者都作为聚合返回似乎也无法解决此问题。我该如何解决这个问题?我目前正在尝试使用子查询,但目前还没有取得多大成功。
最佳答案
这样做:
SUM (CASE WHEN DAY_USE_TOTAL.CUM_MAT_QTY IS NULL THEN 0
ELSE DAY_USE_TOTAL.TOT_MAT_QTY END) "Material Usage"
关于sql - Oracle SQL : Group by not working with aggregates in CASE statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45814784/