我遇到了一个涉及 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
所需的输出是将两个金额相加,并为 Customer 和 Year 的每个唯一组合生成一行。
Desired Output:
Customer | Year | Transaction Amount | Claim Amount
----------------------------------------------------
A | 2007 | 100 | 70
A | 2008 | 130 | NULL
A | 2009 | 210 | 110
对于客户和年份值,我使用了带有 GROUP BY 命令的 LEFT OUTER JOIN 命令。但我得到的是交易金额值的重复,并且倍数与索赔表中匹配行的数量有关。
因此,使用我的示例数据,我得到以下信息:
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
答案是否存在于子查询中?我对他们不熟悉,所以任何指针都会很棒。谢谢。