需要按表格分组,但找不到正确的方法。

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

当我尝试对下面的查询进行分组时,我得到了一个错误,如ORA-00979: not a GROUP BY expressionI have to get a table as invoices by vendor.

SELECT 
ia.id, 
COUNT(ia.invoice_id) total_de_facturas,
CASE 
WHEN SUM(ia.invoice_amount) <> 0 
THEN SUM(ia.invoice_amount)
ELSE SUM(ia.base_amount) 
END monto_total,
ia.currency_code tipo_de_moneda,
MIN(ia.invoice_date) Primer_factura, 
MAX(ia.invoice_date) ultima_factura
FROM invoices_all ia
GROUP BY ia.id, ia.invoice_id
ORDER BY total_de_facturas DESC;

事实上,我已经修复了由其他列分组的错误,因为它没有一个加权函数(currency_code)。但我必须用 invoices_id 和 id 来 "分组 "表。

invoice_date列有发票的日期。

currency_code一栏有发票的汇率。

有什么建议可以解决这个问题吗?

sql oracle group-by
1个回答
1
投票
SELECT 
 ia.id, 
 COUNT(ia.invoice_id) AS total_de_facturas,
 SUM(CASE WHEN ia.invoice_amount <> 0 
          THEN ia.invoice_amount
          ELSE ia.base_amount END) AS monto_total,
 ia.currency_code AS tipo_de_moneda,
 MIN(ia.invoice_date) AS Primer_factura, 
 MAX(ia.invoice_date) AS ultima_factura
 FROM invoices_all ia
 GROUP BY ia.id, ia.currency_code
 ORDER BY total_de_facturas DESC;

0
投票

把SUM放在case外面的时候应该可以正常工作。

SELECT IA.ID,
         COUNT (IA.INVOICE_ID) TOTAL_DE_FACTURAS,
         SUM (
            CASE
               WHEN IA.INVOICE_AMOUNT <> 0 THEN IA.INVOICE_AMOUNT
               ELSE IA.BASE_AMOUNT
            END)
            MONTO_TOTAL,
         IA.CURRENCY_CODE TIPO_DE_MONEDA,
         MIN (IA.INVOICE_DATE) PRIMER_FACTURA,
         MAX (IA.INVOICE_DATE) ULTIMA_FACTURA
    FROM INVOICES_ALL IA
GROUP BY IA.ID, IA.CURRENCY_CODE
ORDER BY TOTAL_DE_FACTURAS DESC;

如果你碰巧需要SUM(IA.INVOICE_AMOUNT)比较,那么你应该先在一个子查询中进行求和,比如下面。

SELECT IA.ID,
         COUNT (IA.INVOICE_ID) TOTAL_DE_FACTURAS,
         SUM (
            CASE
               WHEN IA.SUMMED_INVOICE_AMOUNT <> 0 THEN IA.SUMMED_INVOICE_AMOUNT
               ELSE IA.BASE_AMOUNT
            END)
            MONTO_TOTAL,
         IA.CURRENCY_CODE TIPO_DE_MONEDA,
         MIN (IA.INVOICE_DATE) PRIMER_FACTURA,
         MAX (IA.INVOICE_DATE) ULTIMA_FACTURA
    FROM (  SELECT 
                  SUM (INVOICE_AMOUNT) AS SUMMED_INVOICE_AMOUNT,
                   INVOICE_DATE,
                   CURRENCY_CODE,
                   INVOICE_ID,
                   ID,
                   BASE_AMOUNT
              FROM INVOICES_ALL IA
          GROUP BY INVOICE_DATE,
                   CURRENCY_CODE,
                   INVOICE_ID,
                   ID,
                   BASE_AMOUNT) IA
GROUP BY IA.ID, IA.CURRENCY_CODE
ORDER BY TOTAL_DE_FACTURAS DESC;
© www.soinside.com 2019 - 2024. All rights reserved.