我遇到了涉及 SUM、LEFT OUTER JOIN 和 GROUP BY 命令的问题,但无法找出错误所在。
我有两张表,一张用于客户交易,一张用于客户索赔。客户可以有多个交易和多个索赔,但在两个表中,行都是唯一的。客户也不能提出索赔。
交易表示例:
Transactions:
Customer | Transaction Year | Amount
-------------------------------------
A | 2007 | 100
A | 2008 | 80
A | 2008 | 50
A | 2009 | 210
索赔表示例:
Claims:
Customer | Claim Year | Amount
-------------------------------
A | 2007 | 30
A | 2007 | 40
A | 2009 | 110
所需的输出是将两个金额相加,并为客户和年份的每个唯一组合生成一行。
Desired Output:
Customer | Year | Transaction Amount | Claim Amount
----------------------------------------------------
A | 2007 | 100 | 70
A | 2008 | 130 | NULL
A | 2009 | 210 | 110
我使用了 LEFT OUTER JOIN 命令和 GROUP BY 命令来获取 Customer 和 Year 值。但我得到的是“交易金额”值的重复项,并且倍数与“索赔”表中匹配行的数量相关。
因此,使用我的示例数据,我得到以下结果:
Actual Output:
Customer | Year | Transaction Amount | Claim Amount
----------------------------------------------------
A | 2007 | 200 | 70
A | 2008 | 130 | NULL
A | 2009 | 210 | 110
2007 年,有两项索赔导致 Transactions.Amount 值乘以 2(当有 3 项索赔时,Transaction.Amount 增加三倍,依此类推)。
我的代码如下:
SELECT Transactions.Customer,
Transactions.Year,
sum(Transactions.Transaction Amount),
sum(Claims.Claim Amount)
FROM Transactions
LEFT JOIN Claims ON Claims.Customer = Transactions.Customer
AND Transactions.Year = Claims.Year
GROUP BY Transactions.Customer, Transactions.Year
答案就在子查询中吗?我对它们不熟悉,所以任何指点都会很棒。谢谢。