当我尝试对下面的查询进行分组时,我得到了一个错误,如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一栏有发票的汇率。
有什么建议可以解决这个问题吗?
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;
把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;