我在连接2个表时遇到SUM问题,其中主键在左表中是唯一的,但可以在右表中复制。我的情况是,case_id可能在左表中支付了100英镑,然后在较低级别将其分解为右表中的2£50付款。这导致左表付款在加入时被计数两次,因为case_id在右表中存在两次。
我已经尝试了许多不同的查询变体,但到目前为止还没有成功。我也搜索了这个网站,但一直无法找到适合我的场景。
select distinct
t1.[r_code],
t1.[parent_case_id],
sum(t1.[total_redress_value]),
sum(t2.[payment_amount])
from
[SomeTable1] t1
left join
[SomeTable2] t2 on t1.[case_id] = t2.[case_id]
group by
t1.[r_code], t1.[parent_case_id]
期望total_redress_value和payment_amount的SUM各为100,但是由于来自连接的重复的case_id行,我发现total_redress_value的SUM是200。任何帮助非常感谢。
不幸的是,这种分层计算有点复杂。您可以在t2
ing之前预先汇总join
:
select t1.[r_code], t1.[parent_case_id],
sum(t1.[total_redress_value]),
sum(t2.[payment_amount])
from [SomeTable1] as t1 left join
(select t2.case_id, sum(t2.payment_amount) as payment_amount
from [SomeTable2] as t2
group by t2.case_id
) as t2
on t1.[case_id] = t2.[case_id]
group by t1.[r_code], t1.[parent_case_id]
请注意select distinct
几乎不需要group by
。在这种情况下肯定不需要它。
通过左边的PK将你的桌子分组。
SELECT DISTINCT
t1.[r_code],
t1.[parent_case_id],
SUM(t1.[total_redress_value]),
SUM(t2.[payment_amount])
FROM [SomeTable1] t1
LEFT JOIN
(
SELECT case_id,
MIN(payment_amount) AS payment_amount --or sum etc - whatever fits your logic
FROM [SomeTable2]
GROUP BY case_id
) AS t2
ON t1.[case_id] = t2.[case_id]
GROUP BY t1.[r_code],
t1.[parent_case_id];