【发布时间】:2013-09-28 13:15:12
【问题描述】:
我遇到了一个涉及 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
我使用 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
答案是否存在于子查询中?我对它们不熟悉,所以任何指针都会很棒。谢谢。
【问题讨论】:
-
你能试着写一个不同的子句吗?
-
DISTINCT 不会改变结果,因为它适用于结果表的行(现在是不同的),而不是列。