如何避免左 table 中的重复项,其中主键在联接 table 中不是唯一的

How to avoid duplicates in left table where primary key is not unique in joined table

我在加入 2 个 table 时遇到 SUM 问题,主键在左侧 table 是唯一的,但在右侧 table 可以重复。我遇到的情况是,case_id 可能在左侧 table 支付了 100 英镑,然后在较低级别细分为右侧的 2 英镑 50 支付 table。这导致在加入时左侧 table 付款被计算两次,因为 case_id 在右侧 table.

中存在两次

我已经尝试了多种不同的查询变体,但到目前为止都没有成功。我也搜索过这个网站,但一直无法找到适合我的场景。

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,但是我发现 total_redress_value 的 SUM 是 200,因为来自加入。非常感谢任何帮助。

按左边的 PK 把你右边 table 分组。

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];

不幸的是,这种分层计算有点复杂。您可以在 joining:

之前预先聚合 t2
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]

请注意 group by 几乎不需要 select distinct。在这种情况下当然不需要它。