我的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: not a GROUP BY expression
。
当我删除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
不起作用,但即使将两者都作为聚合返回也不会解决这个问题。我该如何解决这个问题?我现在尝试使用子查询,但目前并没有太大的成功。
答案 0 :(得分:4)
这样做:
SUM (CASE WHEN DAY_USE_TOTAL.CUM_MAT_QTY IS NULL THEN 0
ELSE DAY_USE_TOTAL.TOT_MAT_QTY END) "Material Usage"
答案 1 :(得分:1)
你可以尝试
SELECT ARINVT.CLASS,
ARINVT.ITEMNO,
ARINVT.DESCRIP,
ARINVT.ONHAND,
SUM (CASE WHEN DAY_USE_TOTAL.CUM_MAT_QTY IS NULL THEN 0
ELSE 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