Reputation: 199
My SQL query is currently:
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
I'm currently getting the error ORA-00979: not a GROUP BY expression
.
When I remove the case statement and just have the 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
It works perfectly fine. Why is this? I think it would be because the CASE
statement can return 0 which doesn't work with the GROUP BY
, but even having both returning as aggregates doesn't seem to fix this. How can I resolve this? I'm try to use a subquery at the moment but at the moment not much success with it.
Upvotes: 2
Views: 145
Reputation: 3475
You could try
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
Upvotes: 1
Reputation: 132570
Do this:
SUM (CASE WHEN DAY_USE_TOTAL.CUM_MAT_QTY IS NULL THEN 0
ELSE DAY_USE_TOTAL.TOT_MAT_QTY END) "Material Usage"
Upvotes: 4