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