防止 "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;
我有一个包含大量 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;