繁体   English   中英

Oracle SQL:不按CASE语句中的聚合进行分组

[英]Oracle SQL: Group by not working with aggregates in CASE statement

我的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不起作用,但是即使同时返回两个都似乎无法解决此问题。 我该如何解决? 我目前正在尝试使用子查询,但目前并没有太大的成功。

做这个:

 SUM (CASE WHEN DAY_USE_TOTAL.CUM_MAT_QTY IS NULL THEN 0
 ELSE DAY_USE_TOTAL.TOT_MAT_QTY END) "Material Usage"

你可以试试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM