Oracle SQL:通过不处理CASE语句

时间:2017-08-22 10:09:57

标签: sql oracle

我的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不起作用,但即使将两者都作为聚合返回也不会解决这个问题。我该如何解决这个问题?我现在尝试使用子查询,但目前并没有太大的成功。

2 个答案:

答案 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