当应用多个收据时,我按交易显示交易和收据金额的查询会重复交易金额。 我正在使用 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 还很陌生。 从查看其他线程来看,它似乎涉及“来自(选择不同的”)编码,但我不确定在连接表时如何执行此操作。 谢谢!
您尚未共享任何示例输入数据,这使得测试变得困难,但是:
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