防止 "over-reporting" 由于 SQL LEFT JOIN 行重复

Prevent "over-reporting" due to SQL LEFT JOIN row duplication

我有一个包含大量 LEFT JOIN 的查询,导致 LEFT 行重复。 这当然是预料之中的。但我想不通的是如何在重复记录上留空一列以避免总计不正确。

例如,假设我们有一个商品的仓库收据,然后将其出售给多个客户:

收据编号 收货数量 发货编号 发货数量
R123 1,000 S1 100
R123 1,000 S2 700
R123 1,000 S3 200

如果我们把数字加起来,看起来我们收到了 3,000 件,发货了 1,000 件。

我希望看到的输出是这样的:

收据编号 收货数量 发货编号 发货数量
R123 1,000 S1 100
R123 S2 700
R123 S3 200

现在总数就有意义了。

这可以在 SQL JOIN 中以某种方式实现吗?

您可以使用 case 表达式:

select receipt_num,
       (case when 1 = row_number() over (partition by receipt_num order by shipment_num)
             then receipt_quantity
        end) as receipt_quantity
from . . .
order by receipt_num, shipment_num;