【发布时间】:2021-12-28 12:22:08
【问题描述】:
我有 3 张桌子
付款
| PaymntID | Date | Amount |
|---|---|---|
| 1 | Ago.2021 | 500 |
| 2 | Sep.2021 | 1200 |
| 3 | Oct.2021 | 600 |
现金支付
| PaymntID | Amount |
|---|---|
| 1 | 500 |
| 2 | 400 |
| 3 | 200 |
信用卡支付
| PaymntID | Amount | CreditCard |
|---|---|---|
| 2 | 450 | Visa |
| 2 | 350 | MC |
| 3 | 400 | Visa |
我需要获取 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 | PaymntDate | CashAmount | CreditAmount |
|---|---|---|---|
| 1 | Ago.2021 | 500 | null |
| 2 | Sep.2021 | 400 | 450 |
| 2 | Sep.2021 | 400 | 350 |
| 3 | Oct.2021 | 200 | 400 |
所以在这种情况下,paymntid 2 中的现金支付是重复的。我需要的是下表:
结果
| PaymntID | PaymntDate | CashAmount | CreditAmount |
|---|---|---|---|
| 1 | Ago.2021 | 500 | null |
| 2 | Sep.2021 | 400 | 800 |
| 3 | Oct.2021 | 200 | 400 |
【问题讨论】:
-
提示:
GROUP BY,SUM()。 -
我试过了,但我必须在现金和信用卡支付上都使用 sum() 函数。当我尝试该选项时,我在结果表中得到“800”作为现金金额(id 2)。
-
派生表(子查询)中的GROUP BY,之前加入!
标签: sql firebird firebird2.5