在SQL中重复

时间:2017-03-07 15:41:42

标签: sql sql-server epicorerp

我正在尝试为库存报告创建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 

2 个答案:

答案 0 :(得分:1)

以下内容可能有效。它使用子查询来识别相关部件的相关单个公司。

我假设还有另一个表“公司”,您可能希望从中提取一些公司详细信息,而不仅仅是您要加入的“公司”字段。你会看到我刚刚把“最小”公司作为回归的公司。还有其他方法可以做同样的事情。您可以改为从“零件”表中选择最小(或最大或某些其他)公司。让我知道你是怎么过的。

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

答案 1 :(得分:0)

使用Epicor,我看到......

您是否有理由加入ShipDtl表,因为您的select语句只是从Part和PartBin表中提取信息?请尝试以下方法:

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字段进行汇总才能获得该公司的总额,这也需要逐个分组。