我有一个主表和一个子表。主表是部件的主列表,子表是构建它所需的集合部件。每个子零件都通过parentid链接到其父零件。
零件或“child”有一个childid,它指向主零件列表中自己的条目。我们使用这个链接来获取它的价格,因为在子表中,只存储id。
如果我想把构成每个父部分的所有子部分的总成本加起来。我将如何构造该查询?
total cost应该是一个计算字段,它选择子表中parentid==到其id的所有部分,并将它们的价格*数量相加。
以下是我目前掌握的情况:
//This Query Doesnt work. Just returns 0.
SELECT SUM(PricePer * Qty)
FROM sub inner join main on sub.ChildPID = main.ID where sub.ParentPID = main.ID
//This query will work, where the main.ID is entered manually. but I cant do this
SELECT SUM(PricePer * Qty)
FROM sub inner join main on sub.ChildPID = main.ID where sub.ParentPID = 1
例子:
主表
ID | Name | TotalCost | PricePer
1 Part1 10.00 14.00** SELECTED
2 Part2 0.00 6.00
3 Part3 0.00 2.00
子表
ParentID | ChildID | Name | Qty
1 2 Part2 1
1 3 Part3 2
3条答案
按热度按时间roejwanj1#
不应该在左连接中使用where子句,否则这将用作内部连接
如果你想把结果和上面的查询连接起来。。你应该按照你想要的与上面的查询相关的键来求和和和分组
你可以直接。。根据连接的结果执行更新,例如:
如果你只需要选择
您可以在上面的查询中使用连接作为
wsewodh22#
这变得比我想象的要复杂得多。也许这是我没说清楚的错。这是我发现有效的解决方案。
jgwigjjp3#
下面是一个级别的选择:
对于2个级别,它将是这样的(我无法尝试,可能需要一些修复):
要深入研究,您需要用g3的子查询替换主表,等等。。。
对于4个级别,如下所示: