我有3张 table
付款
现金支付
信用卡付款
我需要获取 PaymentID、日期、现金支付金额和信用卡支付金额,但通过以下查询,我得到了重复项。
请注意,我可以在一次付款中使用两张不同的信用卡,但我也可以在一次付款中使用两张不同的“现金付款”。
查询:
select
PA.DATE AS PaymntDate,
PA.PaymntID AS PaymntID,
CP.amount AS CashAmount,
CCP.amount AS CreditAmount,
from Payments PA
LEFT join CashPayments CP on PA.PaymntID = CP.PaymntID
LEFT join CreditCardPayments CCP on PA.PaymntID = CCP.PaymntID
我得到以下结果:
结果
所以在这种情况下,paymntid 2中的现金支付是重复的。我需要的是下表:
结果
最佳答案
您需要在加入之前聚合每个 ID 的值。最简洁的方法可能是使用 CTE,然后将每个表外部连接到您的付款表,如下所示:
with cp as (
select paymentId, Sum(Amount) Amount
from CashPayments
group by PaymentId
), ccp as (
select paymentId, Sum(Amount) QAmount
from CreditCardPayments
group by PaymentId
)
select p.PaymentId, p.Date,
Coalesce(cp.Amount,0) CashAmount,
Coalesce(ccp.Amount,0) CreditAmount
from Payments p
left join cp on cp.PaymentId = p.PaymentId
left join ccp on ccp.PaymentId = p.PaymentId
关于sql - 在 Firebird 中使用多个表的连接避免重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70507006/