CASE Statement error with ORA-00979: not a GROUP BY expression

问题描述 投票:0回答:1

我正在努力解决为什么下面注释掉的代码 (

AND ESIB.UNIT_OF_ISSUE IS NULL
) 会出现错误 -
ORA-00979: not a GROUP BY expression
当我在
CASE
语句中取消注释这个附加条件时。
UNIT_OF_ISSUE
PRIMARY_UOM_CODE
都是String类型的字段。如果我只使用
WHEN ESIB.PRIMARY_UOM_CODE = 'EA'
就可以了,所以我不明白为什么
AND...
条件会导致问题。

我知道我可以将整个 case 表达式添加到 GROUP BY,但我想看看这里是否还有其他选项,以及为什么会这样。

SELECT ESIB.ITEM_NUMBER, 
       ESIT.LONG_DESCRIPTION, 
       IOP.ORGANIZATION_CODE, 
       isub.secondary_inventory SUBINVENTORY_CODE, 
       CASE WHEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) IS NULL 
       THEN  0         
       WHEN ESIB.PRIMARY_UOM_CODE = 'EA' --AND ESIB.UNIT_OF_ISSUE IS NULL
       THEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY)          
       ELSE SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) / INTRACONV.CONVERSION_RATE  
       END ONHAND_QTY
      ,ESIB.PRIMARY_UOM_CODE ONHAND_UOM
FROM   EGP_SYSTEM_ITEMS_B ESIB
       INNER JOIN EGP_SYSTEM_ITEMS_TL ESIT
       ON ESIB.INVENTORY_ITEM_ID = ESIT.INVENTORY_ITEM_ID 
          AND ESIB.ORGANIZATION_ID = ESIT.ORGANIZATION_ID 
       INNER JOIN INV_ORG_PARAMETERS IOP
       ON ESIB.ORGANIZATION_ID = IOP.ORGANIZATION_ID
          AND INVENTORY_FLAG = 'Y' 
          AND isub.organization_id = iop.organization_id 
GROUP BY
       ESIB.ITEM_NUMBER, 
       ESIT.LONG_DESCRIPTION, 
       IOP.ORGANIZATION_CODE, 
       isub.secondary_inventory, 
       ESIB.PRIMARY_UOM_CODE,
        INTRACONV.CONVERSION_RATE 
sql oracle12c
1个回答
0
投票

INTRACONV.CONVERSION_RATE
不在
GROUP BY
子句中:

一些选项是:

  1. INTRACONV.CONVERSION_RATE
    子句中添加
    GROUP BY

  2. INTRACONV.CONVERSION_RATE
    部门移动到
    SUM
    聚合:

    CASE
    WHEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) IS NULL 
    THEN 0         
    WHEN ESIB.PRIMARY_UOM_CODE = 'EA'
    --AND ESIB.UNIT_OF_ISSUE IS NULL
    THEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY)          
    ELSE SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY / INTRACONV.CONVERSION_RATE)
    END AS ONHAND_QTY
    
  3. INTRACONV.CONVERSION_RATE
    包裹在不同的聚合函数中(例如
    MAX
    MIN
    AVG
    等):

    CASE
    WHEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY) IS NULL 
    THEN 0         
    WHEN ESIB.PRIMARY_UOM_CODE = 'EA'
    --AND ESIB.UNIT_OF_ISSUE IS NULL
    THEN SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY)          
    ELSE SUM(IOQD.PRIMARY_TRANSACTION_QUANTITY)
          / MAX(INTRACONV.CONVERSION_RATE)
    END AS ONHAND_QTY
    
© www.soinside.com 2019 - 2024. All rights reserved.