oracle - oracle 递归与计算值数量公式
问题描述
我需要帮助来进行递归查询。
--select * from tmpProduto; 创建表 tmpProduto( 身份证号码, descpro varchar2(100), unimetr varchar2(3), 数量(10,4)) 更改表 tmpProduto 添加约束 pk_TmpProduct 主键(idpro); --select * from tmpComposition; 创建表 tmpComposition( 型号, 身份证号码, 数量(10,4)); alter table tmpComposition 添加约束 pk_TmpCompositon 主键 (idmodel, idcomp);
我有两个表并进行递归查询
选择 p.idpro、c.idmodel、c.idcomp、c.qtty、LEVEL lnum FROM tmpComposition c INNER JOIN tmp产品 开(p.idpro = c.idmodel) 通过之前连接 c.idcomp = c.idmodel 从 M.CODMOD = :vcdProduto 开始;
我想做,用
product.qtty * component.qtty计算 qtty 字段——这里我需要应用递归,其中 level 为 1
component.qtty * component.qtty——这里 level 大于 1
样品:
产品
idprod | descprod | qtty
0001 | 'Test Prod1' | 1
0002 | 'Test Prod2' | 1
零件
idmodel | idcomp | qtty
0001 | 0002 | 0,5
0001 | 0003 | 0,43
0001 | 0075 | 1,15
0002 | 0005 | 0,24
0005 | 0006 | 0,25
0005 | 0007 | 0,78
我需要的结果
idmodel | idcomp | p.qtty | c.qtty | value_I_want
0001 | 0002 | 1 | 0,5 | 0,5
0002 | 0005 | | 0,24 | 0,12
0005 | 0006 | | 0,25 | 0,03
0005 | 0007 | | 0,78 | 0,0936
0001 | 0003 | 1 | 0,43 | 0,43
0001 | 0075 | 1 | 1,15 | 1,15
解决方案
select level
, q.*
, connect_by_root q.prod_qty * q.comp_qty
, connect_by_root q.comp_qty * q.comp_qty
(select distinct p.idpro,
p.descpro,
p.unimetr,
p.qtty prod_qty,
c.idmodel,
c.idcomp,
c.qtty comp_qty
from tmpProduto p
, tmpComposition c
where p.idpro = c.idmodel
) q
connect by prior q.idcomp = q.idmodel
start with p.idpro = :p_prod_id
推荐阅读
- php - Woocommerce 通过批量操作更新订单
- regex - 您能否仅匹配括号内的单个字符以使用正则表达式进行替换?
- amazon-web-services - AWS 上的 Flink 有状态函数如何处理来自 Lambda 的背压/429 节流?
- flutter - 使颤动的 Datepicker 在边缘处变圆
- c# - 过滤/排序后如何使分页不重置为第 1 页而是停留在当前页面?
- arrays - 如果提供了 1 个值,Powershell Get-Unique 会在数组中拆分字符串
- rust - 如何链接任意数量的迭代?
- excel - Excel查找字符串是否恰好包含一次子字符串
- qt - 在 DelegateChooser 中使用列号作为角色
- python - 如何计算列的元素?