我正在尝试为库存报告创建SQL查询。到目前为止,我已经创建了一个SQL查询,该查询成功地返回了唯一的部件号及其描述和现有数量。我想将客户名称添加到我的报告中,但由于我们向多个客户销售部分零件,因此尽管有DISTINCT声明,但添加此部件会导致部件号和库存数量重复。有没有办法将结果限制为每个零件只列出一个客户?我是SQL的新手,所以我想我错过了一些明显的东西。这是我的疑问:
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
答案 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字段进行汇总才能获得该公司的总额,这也需要逐个分组。