首页 > 解决方案 > 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  

标签: oracleplsqlrecursive-query

解决方案


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

推荐阅读