对重复行进行分区求和

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

当应用多个收据时,我按交易显示交易和收据金额的查询会重复交易金额。 我正在使用 select unique 和 sum over partition,因为事务可能有多行,并且我只想在此处报告总事务金额。

select distinct 
    sum (rctl.revenue_amount) over (partition by rcta.trx_number) as "TRX Ammount",
    acra.receipt_number as "Receipt Number"
from
    apps.ra_customer_trx_all rcta,
    apps.ra_customer_trx_lines_all rctl,
    apps.ar_receivable_applications_all araa,
    apps.ar_cash_receipts_all acra
    
where
    rcta.customer_trx_id = rctl.customer_trx_id
    and rcta.trx_number = '12345'
    and rcta.customer_trx_id = araa.applied_customer_trx_id
    and araa.cash_receipt_id = acra.cash_receipt_id

仅对 rcta 和 rctl 表运行查询时,我得到了预期值。

TRX数量
5

添加 araa 和 acra 收据表时,该值是三倍,因为这里的交易应用了三个收据;我知道我会得到三行相同数量的数据,但我希望该数量实际上是正确的。

TRX数量 收据号码
15
15 收据2
15 收据3

我觉得这可能是一个基本问题,请原谅我,因为我对 SQL 还很陌生。 从查看其他线程来看,它似乎涉及“来自(选择不同的”)编码,但我不确定在连接表时如何执行此操作。 谢谢!

sql oracle
1个回答
0
投票

您尚未共享任何示例输入数据,这使得测试变得困难,但是:

  • 你可能想先聚合,聚合后再加入;和
  • 您可能不想使用分析函数来执行
    SUM
    ,然后使用
    DISTINCT
    去除重复项,但想使用
    SUM
    GROUP BY

您正在加入

rcta.customer_trx_id = araa.applied_customer_trx_id
,因此在
rcta
表中您想要
GROUP BY rcta.customer_trx_id
(如果您可以有多个事务,则还要在
rcta.customer_trx_id
子句中包含
GROUP BY
)。

类似这样的:

SELECT r.trx_amount AS "TRX Ammount",
       acra.receipt_number AS "Receipt Number"
FROM   ( SELECT rcta.customer_trx_id,
                SUM(rctl.revenue_amount) AS trx_amount
         FROM   apps.ra_customer_trx_all rcta
                INNER JOIN apps.ra_customer_trx_lines_all rctl
                ON rcta.customer_trx_id = rctl.customer_trx_id
         WHERE  rcta.trx_number = '12345'
         GROUP BY
                rcta.customer_trx_id,
                rcta.trx_number
       ) r
       INNER JOIN apps.ar_receivable_applications_all araa
       ON r.customer_trx_id = araa.applied_customer_trx_id
       INNER JOIN apps.ar_cash_receipts_all acra
       ON araa.cash_receipt_id = acra.cash_receipt_id
© www.soinside.com 2019 - 2024. All rights reserved.