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

mspsb9vt  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(249)

当我尝试将下面的查询分组时,会出现如下错误:
ora-00979:不是表达式分组
我得按供应商开一张表作为发票。

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\u代码)。但不是这个,我要按id和id对表进行分组,
发票日期列包含发票日期,
“货币代码”列具有发票的汇率
对这个麻烦有什么建议吗?

axkjgtzd

axkjgtzd1#

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;
3bygqnnd

3bygqnnd2#

把钱放在箱子外面的时候应该行得通。

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\u 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;

相关问题