sql - Oracle SQL : Group by not working with aggregates in CASE statement

标签 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:不是 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/

相关文章:

MySQL TRIGGER NEW.date=NOW() 在除 `id` 和 `name` 之外的任何列更新

sql - Oracle中有没有一种方法可以使列不区分大小写?

java - 如何使用 SQL 浏览图像并将其保存到 Oracle DB 中?

java - Sqoop导入错误错误:java.io.IOException:nextKeyValue中的SQLException

mysql - 将 MySQL 文件导入 Oracle SQL Developer

sql - 无法从 plpgsql 函数内的动态命名临时表运行 'select into'

sql - 根据列值从现有表生成新的临时表

sql - 在一个 SELECT 语句中设置两个标量变量?

sql - 获取准确的时间戳值?

java - 将日期保存到 Oracle 时的奇怪行为