在 SQL 中重复

duplicates in SQL

我正在尝试为清单报告创建 SQL 查询。到目前为止,我已经创建了一个 SQL 查询,它成功地返回了唯一的零件号及其描述和现有数量。我想将客户名称添加到我的报告中,但由于我们向多个客户销售一些零件,因此尽管有 DISTINCT 声明,添加此名称会导致零件编号和手头数量重复。有没有办法将结果限制为每个零件只列出一个客户?我是 SQL 的新手,所以我想我遗漏了一些明显的东西。这是我的查询:

SQL Query

select distinct [Part].[PartNum] as [Part_PartNum]
    , [Part].[PartDescription] as [Part_PartDescription]
    , [PartBin].[OnhandQty] as [PartBin_OnhandQty] 
from Erp.Part as Part 
inner join Erp.ShipDtl as ShipDtl on Part.Company = ShipDtl.Company 
                            And Part.PartNum = ShipDtl.PartNum 
inner join Erp.PartBin as PartBin on Part.Company = PartBin.Company 
                            And Part.PartNum = PartBin.PartNum 
order by Part.PartNum 

使用 Epicor,我明白了...

您加入 ShipDtl table 是否有原因,因为您的 select 语句仅从 Part 和 PartBin table 中提取信息?请尝试以下操作:

SELECT p.PartNum, PartDescription, OnHandQty
FROM erp.Part AS Part INNER JOIN
     erp.PartBin AS PartBin ON Part.Company = PartBin.Company and Part.PartNum = PartBin.PartNum

另请注意,如果您的公司使用多个箱子,您将必须对 OnHandQty 字段进行求和以获得该公司的总数,这也需要分组语句。

类似下面的方法可能会起作用。它使用子查询来为相关部件识别相关的单个公司。

我假设还有另一个 table "Company",您可能希望从中提取一些公司详细信息,而不仅仅是您要加入的 "Company" 字段。您会看到我刚刚将 "minimum" 公司作为 return 的公司。还有其他方法可以做同样的事情。您可以改为从 "Part" table 中获取最小(或最大或其他)公司。让我知道你过得怎么样。

select
    [Part].[PartNum] as [Part_PartNum]
    , [Part].[PartDescription] as [Part_PartDescription]
    , [Company].[CompanyDesc] as [CompanyDesc]
    , [PartBin].[OnhandQty] as [PartBin_OnhandQty] 
from
    Erp.Part as Part 
    inner join
    (
     select
        ShipDtl.PartNum,
        min(ShipDtl.Company) Company
     from
        Erp.ShipDtl
     group by
        ShipDtl.PartNum
    ) as Part1Company ON
        Part.Company = Part1Company.Company AND
        Part.PartNum = Part1Company.PartNum
    inner join Erp.PartBin as PartBin on
        Part.Company = PartBin.Company And
        Part.PartNum = PartBin.PartNum 
    inner join Erp.Company as Company on
        Part.Company = Company.Company
order by
    Part.PartNum