首页 > 解决方案 > 访问查询:子程序集汇总

问题描述

我有一个包含产品材料清单的数据库,但其中一些项目是子组件。例如

普通产品(不相关,只是一个例子):

MyNormalProduct:
      Item Name             Quantity     Cost
    - Item 1                1            $50
    - Item 2                1            $25

带有子组件的产品:

MySubAssemblyProduct:
      Item Name              Quantity     Cost
    - Item 1                 1            $100
    - Sub-Assembly Item      1
        - Sub Part 1         1            $100     
        - Sub Part 2         1            $100

我需要做的是有一个查询,将所有子项目的成本汇总到报告的一行中。所以输出将如下所示:

Item Name              Component          Quantity    Cost
MySubAssemblyProduct   Item 1                 1       $100
MySubAssemblyProduct   Sub-Assembly Item      1       $200

为了帮助解决这个问题,我准备了三张桌子tblProducts和.tblLinktblItems

tbl产品:

这包含标题信息:

tbl产品

tbl链接:

一个帮助我链接产品的简单表格,如果其中有值,ParentItem则链接是子组件。在图像中,红色项目是顶层,橙色项目是子装配。相关数量也存储在这里。你会看到MaterialProcessSKU7 和 8 属于MaterialProcessSKU6。

在此处输入图像描述

tblItems:

这是包含所有项目、相关成本和其他信息的表格。

表项

我可以使用以下 SQL 获取子程序集的列表:

SELECT tblItems.Type, tblLink.SKU, tblItems.ItemNo, tblItems.[Item Name], tblItems.[Buy Quantity], tblLink.Quantity, tblItems.[Unit of Measure], tblItems.Waste, 0 AS [Laser Mins], 0 AS [Labour Mins], tblItems.Cost AS [$ Rate], ([tblLink].[Quantity]*[tblItems].[Cost])+(([tblLink].[Quantity]*[tblItems].[Cost])*[tblItems].[waste]) AS [$ Cost], tblLink.ParentItem

FROM (tblLink INNER JOIN tblProducts ON tblLink.SKU = tblProducts.SKU) 
INNER JOIN tblItems ON tblLink.MaterialProcessSKU = tblItems.ItemNo
WHERE (((tblItems.Type)="Sub-Assembly") AND ((tblLink.ParentItem) Is Null));

我得到了这个输出,但显然$ Cost是空白的:

子组件输出

我还可以使用此 SQL 获得子程序集的总数 - 你会看到我手动将其定义ParentItem6

SELECT Sum([Cost]*[Quantity]) AS TotalCost
FROM tblProducts, tblLink INNER JOIN tblItems ON tblLink.MaterialProcessSKU = tblItems.ItemNo
GROUP BY tblLink.SKU, tblLink.ParentItem, tblLink.Quantity, tblItems.Cost
HAVING (((tblLink.ParentItem)=6));

这是输出:

总消耗

我需要合并两个 SQL 语句,以便在第一个 SQL 查询TotalCost中从上面的 SQL 查询中获得$ Cost

请有人能指出我正确的方向吗?

谢谢克里斯

* 更新 *

我尝试从以下内容开始:

SELECT tblItems.ItemNo, c.TotalCost as NewCost 

FROM tblItems

 inner join (select tblItems.ParentItem from tblLink group by ParentItem) b on tblItems.ItemNo = b.ParentItem

 inner join (select tblItems.ItemNo,sum(Cost) as TotalCost from tblItems group by tblItems.ItemNo) c on tblItems.ItemNo = b.ParentItem

但我收到语法错误(缺少运算符)。

有人可以帮忙吗?

标签: sqlms-accessselect

解决方案


推荐阅读