我有一个主表和一个子表。主表是零件的主列表,子表是构建零件所需的集合零件。每个子部分都通过ParentID链接到其父部分。
零件或“子零件”有一个ChildID,它指向主要零件清单中它自己的条目。我们使用此链接来获取价格,因为在子表中仅存储ID。
通常,只有标记为“ sub”的零件才存储其价格。 以下查询可用于汇总任何条目的费用,以汇总其子项目列表中所有价格的总和。
我想做的是,如果子部分是PartType = master,那么我想使用相同的查询来汇总其成本,并使用它作为Price。
我知道这是一个非常复杂的问题,这可能吗?
Select *, ifnull(
(SELECT SUM(main.PricePer * Qty)
FROM sub inner join main on sub.ChildID = main.ID
where sub.ParentID = main1.PID),
0)
from main as main1
示例:
我们有
主表的第1部分和第4部分作为主部分。第1部分准确地汇总了其总成本,因为它的所有子部分都是指定的子部分。但是第4部分将第1部分作为子部分。这意味着它对PricePer的引用不准确。总计时,它应该对第1部分使用TotalCost,但是要做到这一点,我需要以某种方式嵌套在查询内部使用的查询part1。
ID | Name | TotalCost | PricePer | PartType
1 Part1 10.00 0.00 master
2 Part2 0.00 6.00 sub
3 Part3 0.00 2.00 sub
4 Part4 4.00 0.00 master //should be 14.00
第1部分的子表
ParentID | ChildID | Name | Qty
1 2 Part2 1
1 3 Part3 2
第4部分的子表
ParentID | ChildID | Name | Qty
4 1 Part1 1
4 3 Part3 2