你这里只有递归查询,并没有将原材料的价格加起来赋值给半成品的
时间: 2024-02-29 13:52:14 浏览: 24
非常抱歉,我误解了您的意思。如果您需要将BOM中所有原材料的成本加起来赋值给半成品和成品,可以使用以下SQL查询:
```sql
WITH bom_tree(ima01, ima02, ima53) AS (
-- 先将成品加入递归表达式
SELECT ima01, ima02, ima53
FROM ima_file
WHERE ima01 = 'A'
UNION ALL
-- 递归查询元件
SELECT i.ima01, i.ima02, SUM(i.ima53 * b.bmb53) AS cost
FROM bom_tree t
JOIN bmb_file b ON t.ima01 = b.bmb01
JOIN ima_file i ON b.bmb03 = i.ima01
WHERE i.ima04 = '1' -- 只查询原材料
GROUP BY i.ima01, i.ima02
)
-- 最终查询结果
SELECT ima01, ima02, ima53
FROM bom_tree;
```
这个SQL查询和之前的查询类似,只是在递归查询元件时,加入了一个条件限制只查询原材料,并且将每个原材料的成本价乘以其在BOM中的数量(bmb53),然后将它们相加得到半成品和成品的成本价。最后,查询结果仍然只包含物料的料号和成本价。
相关问题
半成品和成品自身没有采购价,完全由原材料的价格组成
好的,如果半成品和成品自身没有采购价,完全由原材料的价格组成,那么我们可以稍微修改一下SQL查询,将半成品和成品的成本价计算方式改为组成它的元件的成本价之和。以下是修改后的递归SQL查询:
```sql
WITH RECURSIVE bom_tree AS (
-- 先将成品加入递归表达式
SELECT bmb01, bmb03, bmb53
FROM bmb_file
WHERE bmb01 = '1'
UNION ALL
-- 递归查询元件
SELECT b.bmb01, b.bmb03, b.bmb53
FROM bom_tree t
JOIN bmb_file b ON t.bmb03 = b.bmb01
)
-- 计算每个元件的成本价
SELECT bmb03, SUM(bmb53) AS cost
FROM bom_tree
GROUP BY bmb03
ORDER BY bmb03
```
这个SQL查询也使用了递归公共表达式,先将成品加入递归表达式,然后递归查询元件,计算每个元件的成本价。最后,对元件进行分组,计算每个元件的成本价之和,得到最终的查询结果。
上述递归求成品和半成品价格的需求加了新条件
好的,明白了。根据你的描述,我了解到你想要对之前的递归求成品和半成品价格的需求进行修改以适应新的条件。根据你提供的信息,我假设你想要在原来的求解过程中加入新的料件编号 `ima01`,并且使用新的价格 `ima53` 替换掉原来的价格 `bmb53`。如果我的理解有误,请随时指出。
为了实现这个修改,你可以在 `find_price` 函数中添加一个新的参数 `new_price`,用于存储新的价格。然后,在递归调用时,你可以根据料件编号是否为 `ima01` 来选择使用原来的价格 `bmb53` 还是新的价格 `ima53`。具体的实现代码如下所示:
```python
def find_price(item, new_price=None):
if item in price_dict:
# 如果给出了新价格,则使用新价格;否则使用原来的价格
return new_price if new_price is not None else price_dict[item]
else:
# 递归调用
sub_items = bom_dict[item]
sub_prices = []
for sub_item in sub_items:
if sub_item == 'ima01':
sub_price = find_price(sub_item, new_price='ima53')
else:
sub_price = find_price(sub_item, new_price=new_price)
sub_prices.append(sub_price)
return sum(sub_prices)
```
在这个修改后的代码中,当遇到料件编号为 `ima01` 的子件时,程序会使用新的价格 `ima53`;否则,程序会根据传入的 `new_price` 参数来选择使用原来的价格 `bmb53` 还是新的价格 `ima53`。
希望这个修改后的代码可以满足你的需求。如果你有任何疑问或需要进一步的帮助,请随时告诉我。