假如有个单号A,展开如下
level      item        child       QTY
1          A           B           10
2          B           C           10
2          B           D           90
2          B           E           20
3          C           F           10
3          C           G           20就是说QTY只对应他的前一级。以第2条记录来说,B零件需要10个C零件,这没问题,
但是因为我是用A零件展开的,所以我希望,所有的QTY都是对应A零件的,所以第2条记录的
QTY应该是 10×10=100希望的结果如下:
level      item        child       QTY
1          A           B           10
2          B           C           100
2          B           D           900
2          B           E           200
3          C           F           1000
3          C           G           2000请问大侠应该怎么写

解决方案 »

  1.   

    参见
    http://topic.csdn.net/u/20100304/12/8fe25f7d-9a44-412f-afb7-a754016363c9.html
      

  2.   

     
    SQL> select * from ttt_chain;
     
            LVL ITEM       CHILD              QTY
    ----------- ---------- ---------- -----------
              1 A          B                   10
              2 B          C                   10
              2 B          D                   90
              2 B          E                   20
              3 C          F                   10
              3 C          G                   20
     
    6 rows selected
     
    SQL> 
    SQL> select func_test2(1||sys_connect_by_path(qty,'*')),level, lvl,item,child,a.qty
      2  from ttt_chain a start with not exists(select 1 from ttt_chain b where b.child=a.item) connect by prior a.child=a.item;
     
    FUNC_TEST2(1||SYS_CONNECT_BY_P      LEVEL         LVL ITEM       CHILD              QTY
    ------------------------------ ---------- ----------- ---------- ---------- -----------
                                10          1           1 A          B                   10
                               100          2           2 B          C                   10
                              1000          3           3 C          F                   10
                              2000          3           3 C          G                   20
                               900          2           2 B          D                   90
                               200          2           2 B          E                   20
     
    6 rows selected
     
    SQL> 
      

  3.   

    这样和你讲吧,我在学校的时候也总喜欢把复杂的业务写成一个SQL,然后到处炫耀
    可是后来工作了,才发现优秀的软件一向是“最简单的语法,写出最复杂的功能”象你说的这种需求,硬写到一个SQL里面是可以的,但是我还是推荐使用PL/SQL来完成,
    一行一行写清楚,这样一端时间后你再拿出来,稍微看一下就可以进行修改,写成一个的话就麻烦多了