Запрос на доступ: сворачивание подсборок - PullRequest
2 голосов
/ 06 марта 2019

У меня есть база данных, которая содержит спецификацию на продукты, но некоторые из этих элементов являются сборочными.например,

Обычный продукт (не относится, просто пример):

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

tblLink:

Простойтаблица, которая помогает мне связать продукты, если в ParentItem есть значение, то ссылка на подсборку.На изображении красные элементы - верхний уровень, оранжевые элементы - сборка.Соответствующие количества также хранятся здесь.Вы увидите, что MaterialProcessSKU 7 и 8 принадлежат MaterialProcessSKU 6.

enter image description here

tblItems:

Это таблица, которая содержит все предметы, с соответствующими затратами и другой информацией.

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 пусто:

Sub-Assembly Output

Я также могу получить сумму подсборки, используя этот 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

Мне нужно объединить два оператора 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

Но я получаю синтаксисОшибка (отсутствует оператор).

Может кто-нибудь помочь, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...