在这里处理查询,但我在子项列中获得了多个子项。我想调整我的查询只显示一个Subitem。我拥有的PO表可能有也可能没有多个子项,这就是为什么它有时显示很多子项。
SELECT
dbo.MasterTable.StartItem,
dbo.MasterTable.SubItem,
dbo.MasterTable.STDCOST,
ISNULL(dbo.PO_2_months.[Purchase Price], dbo.MasterTable.STDCOST) AS NewCost,
dbo.PO_2_months.[Purchase Price]
FROM dbo.MasterTable LEFT OUTER JOIN
dbo.PO_2_months ON dbo.MasterTable.SubItem = dbo.PO_2_months.Item
GROUP BY
dbo.MasterTable.SubItem,
dbo.MasterTable.STDCOST,
ISNULL(dbo.PO_2_months.[Purchase Price], dbo.MasterTable.STDCOST),
dbo.MasterTable.StartItem,
dbo.PO_2_months.[Purchase Price]
HAVING (dbo.MasterTable.StartItem = 'FO6534')
答案 0 :(得分:0)
该列表中的每个结果都是不同的。某些字段可能有重复,但该结果集中没有两个完全相同的记录。
因此,例如,如果您只需要子项0S331500G0
的一个结果,则需要指定要保留的记录以及要丢弃的记录。您希望结果集中的0S331500G0
项报告STDCOST
0.6295
或0.6470
吗?或者其平均值?
只要您指定,您就可以选择不同的:
SELECT DISTINCT
dbo.MasterTable.StartItem,
dbo.MasterTable.SubItem,
AVG(dbo.MasterTable.STDCOST),
AVG(dbo.MasterTable.NewCost),
AVG(dbo.MasterTable.PurchasePrice)
...
MIN()
,MAX()
和SUM()
是Aggregate Functions的其他示例,您可能希望使用这些示例来指定在项目不相同的情况下如何处理数据。< / p>
答案 1 :(得分:0)
SELECT DISTINCT
对您已有的内容没有任何影响。原因是您的子项目尽管具有相同的ID,但并不明显......您需要调用您如何选择 子项目的子项目。例如,一个简单的选择是采用最大stdcost
,newcost
和Purchase Price
(使用MAX
聚合函数);但“简单”并不一定意味着“正确”!
答案 2 :(得分:0)
这取决于您想要确定要选择的众多子项中的哪一个。
在您的情况下,您的MasterTable已经具有StartItem和SubItem之间的1:many关系。这意味着您可以简单地预处理该表并从那里开始工作......
SELECT
dbo.MasterTable.StartItem,
dbo.MasterTable.SubItem,
dbo.MasterTable.STDCOST,
ISNULL(dbo.PO_2_months.[Purchase Price], dbo.MasterTable.STDCOST) AS NewCost,
dbo.PO_2_months.[Purchase Price]
FROM
(
SELECT StartItem, MIN(SubItem) FROM dbo.MasterTable GROUP BY StartItem WHERE StartItem =
'FO6534'
)
AS reduced_MasterTable
INNER JOIN
dbo.MasterTable
ON MasterTable.StartItem = reduced_MasterTable.StartItem
AND MasterTable.SubItem = reduced_MasterTable.SubItem
LEFT OUTER JOIN
dbo.PO_2_months
ON dbo.MasterTable.SubItem = dbo.PO_2_months.Item
这假定MasterTable和PO_2_Months中的记录之间存在1:1的关系。如果它是1:很多,你会想要将GROUP BY放回去,并且可能在dbo.PO_2_months上使用SUM()或MAX()或其他东西。[购买价格]。