oracle 通过GROUP BY查询SUM和DECODE以及其他列错误

wnvonmuf  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(132)

我有以下查询,其中我选择客户编号,我执行DECODE,其中我有位置的测量数据和SUM函数中发票的净值之和。我从发票数据表中调用此数据。
当我尝试运行查询时,SUM函数出现问题,我得到以下错误:

*00934. 00000 -“此处不允许使用组函数”。 原因:

  • 操作:行中出错:18柱:6**
SELECT CLT_NOMBRE1, --name of customer
    
    DECODE(zpk, NULL, MAX(zpk) OVER (PARTITION BY factura_ha, facturanumero,locacion) MELO,
    
    SUM (fct_neto) fct_neto
    
    FROM tbl_facturas
    WHERE NETOZ !=0 
                    AND lugar_lectura = '902'
                    AND anio =  '2023'

    GROUP BY CLT_NOMBRE1,
    DECODE(zpk, NULL, MAX(zpk) OVER (PARTITION BY factura_ha, facturanumero,locacion)

字符串
我在互联网上搜索了一个解决方案,在许多情况下,我读到我必须从GROUP BY中删除聚合字段,在这种情况下是SUM(fac_neto),但对于其他两个字段CLT_NOMBRE1和DECODE(梅洛),我必须将它们包含在那里。在CASE的情况下,不带别名的所有完整语句。我试过了,但它不起作用。有人可以告诉我什么可能是错的,我一直试图解决它几天,但没有成功。

xxhby3vn

xxhby3vn1#

1.您缺少DECODE的右括号。
1.更基本的是,在聚合函数之后计算分析函数。您需要使用子查询来强制反转评估顺序:

SELECT CLT_NOMBRE1,
       melo,
       SUM(fct_neto) AS fct_neto
FROM   (
  SELECT CLT_NOMBRE1,
         CASE
         WHEN zpk IS NULL
         THEN MAX(zpk) OVER (PARTITION BY factura_ha, facturanumero,locacion)
         ELSE NULL
         END as MELO,
         fct_neto
  FROM   tbl_facturas
  WHERE  NETOZ !=0 
  AND    lugar_lectura = '902'
  AND    anio =  '2023'
)
GROUP BY
       CLT_NOMBRE1,
       melo;

字符串

  • 注意:你可以使用DECODE函数代替CASE表达式;但是,CASE是ANSI标准,而DECODE是Oracle特定的。*

fiddle

相关问题