У меня есть база данных, которая содержит спецификацию на продукты, но некоторые из этих элементов являются сборочными.например,
Обычный продукт (не относится, просто пример):
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
, tblLink
и tblItems
.
tblПродукты:
Содержит информацию заголовка:
![tblProducts](https://i.stack.imgur.com/7EqEU.jpg)
tblLink:
Простойтаблица, которая помогает мне связать продукты, если в ParentItem
есть значение, то ссылка на подсборку.На изображении красные элементы - верхний уровень, оранжевые элементы - сборка.Соответствующие количества также хранятся здесь.Вы увидите, что MaterialProcessSKU
7 и 8 принадлежат MaterialProcessSKU
6.
![enter image description here](https://i.stack.imgur.com/xnBvR.jpg)
tblItems:
Это таблица, которая содержит все предметы, с соответствующими затратами и другой информацией.
![tblItems](https://i.stack.imgur.com/liyCI.jpg)
Я могу получить список подразделов.Сборки, использующие следующий 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
пусто:
![Sub-Assembly Output](https://i.stack.imgur.com/5UvfX.jpg)
Я также могу получить сумму подсборки, используя этот SQL - вы увидите, что я вручную определяю ParentItem
как 6
:
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));
Это вывод:
![Total Cost](https://i.stack.imgur.com/2SRun.jpg)
Мне нужно объединить два оператора SQL, чтобы я получил TotalCost
из вышеуказанного запроса SQL в $ Cost
в первом запросе SQL.
Пожалуйста, кто-нибудь может указать мне правильное направление?
Спасибо Крис
* ОБНОВЛЕНИЕ *
Я пытался начатьсо следующим:
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
Но я получаю синтаксисОшибка (отсутствует оператор).
Может кто-нибудь помочь, пожалуйста?