首页 > 解决方案 > 如何避免左表中主键在连接表中不唯一的重复

问题描述

我在加入 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。非常感谢任何帮助。

标签: sqlms-accessms-access-2010

解决方案


按左边的 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];

推荐阅读