你这里只有递归查询,并没有将原材料的价格加起来赋值给半成品的
时间: 2024-02-29 09:52:14 浏览: 73
非常抱歉,我误解了您的意思。如果您需要将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),然后将它们相加得到半成品和成品的成本价。最后,查询结果仍然只包含物料的料号和成本价。
相关问题
半成品和成品的成本直接赋值给ima53,再优化下上述代码
好的,如果半成品和成品的成本直接赋值给ima53,则可以进一步优化之前的SQL查询,去掉计算成本价的部分,直接查询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, i.ima53
FROM bom_tree t
JOIN bmb_file b ON t.ima01 = b.bmb01
JOIN ima_file i ON b.bmb03 = i.ima01
)
-- 最终查询结果
SELECT ima01, ima02, ima53
FROM bom_tree;
```
这个SQL查询仍然使用了递归公共表达式(WITH clause)来完成递归查询,先将成品加入递归表达式,然后递归查询元件,查询结果只包含物料的料号和成本价。请注意,这个SQL查询中的ima01 = 'A' 表示查询成品A的BOM,你可以根据实际情况修改成品的料号。
阅读全文