【问题标题】:Prevent "over-reporting" due to SQL LEFT JOIN row duplication防止由于 SQL LEFT JOIN 行重复而导致的“过度报告”
【发布时间】:2021-06-26 17:56:35
【问题描述】:

我有一个带有一堆 LEFT JOIN 的查询,导致 LEFT 行重复。 这当然是意料之中的。但我想不通的是如何在重复记录上空白一列以避免不正确的总数。

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

Receipt No Receipt Quantity Shipment No Shipment Quantity
R123 1,000 S1 100
R123 1,000 S2 700
R123 1,000 S3 200

如果我们合计这些数字,看起来我们收到了 3,000 个并发货了 1,000 个。

我想看到的输出是这样的:

Receipt No Receipt Quantity Shipment No Shipment Quantity
R123 1,000 S1 100
R123 S2 700
R123 S3 200

现在总数是有意义的。

这可能在 SQL JOIN 中以某种方式进行吗?

【问题讨论】:

  • 按收据编号分组
  • Max([Receipt Quantity]) , Sum([Shipment Quantity]) 这样的聚合也很有意义。

标签: sql tsql left-join


【解决方案1】:

您可以使用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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2017-02-18
    • 2021-11-08
    相关资源
    最近更新 更多