【问题标题】:How to handle duplicate values如何处理重复值
【发布时间】:2014-03-19 23:17:35
【问题描述】:

我有一张桌子,里面有 100k 以上的物品。 我需要创建一个带有“最优惠价格”的表格

大多数商品都有唯一的供应商,但有些商品可能来自 2 或 3 个不同的供应商,但具有相同的制造商部件号 [MPN]。

要查找我使用过的重复值:

In (SELECT [MPN] FROM [Main Data] As Tmp GROUP BY [MPN] HAVING Count(*)>1 )

如何处理重复记录?对于每个重复的 [MPN],我想选择既存货又价格最低的记录?

表有字段: [EAN]、[MPN]、[Inventory Number] - 此字段具有唯一的供应商后缀、[Name]、[Cost]、[Quantity]

谢谢你!

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    我会试试这个:

    SELECT M1.MPN, M1.[Name], M2.QTY, Max(M1.Cost) as MaxCost, Min(M1.Cost) as MinCost
    FROM [Main Data] M1
    INNER JOIN (SELECT [MPN], Sum(1) as QTY FROM [Main Data] GROUP BY [MPN] HAVING Count(*)>1 ) M2
       ON M1.MPN = M2.MPN
    GROUP BY M1.MPN, M1.[Name]
    

    这将为您提供库存数量和最高价格,以及每件商品的最低价格。如果您发现其他字段无用,请随意删除它们。

    【讨论】:

    • 感谢您的快速回复,Johnny Bones。但是我在 FROM 子句中收到语法错误,来自 HAVING Count(*)>1)) 之后的 M2?
    • 你能确认 SELECT [MPN], Sum(1) as QTY FROM [Main Data] As Tmp GROUP BY [MPN] HAVING Count(*)>1 返回结果吗?
    • 是的。表明我有空白 MPN 的问题,但我稍后会解决!
    • 我不确定这是否会做任何事情,但在那个 SQL 语句的中间它说“FROM [Main Data] As Tmp GROUP BY”。那个“As Tmp”不应该在那里,它从来没有被引用过。尝试删除它,你不需要它,它可能会混淆编译器。
    • “As Tmp”应该是“As M2”吗?这会导致 Join 操作中的语法错误。删除“As tmp”仍然有 FROM 子句错误。
    猜你喜欢
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2015-06-07
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多