假如有个单号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请问大侠应该怎么写
http://topic.csdn.net/u/20100304/12/8fe25f7d-9a44-412f-afb7-a754016363c9.html
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>
可是后来工作了,才发现优秀的软件一向是“最简单的语法,写出最复杂的功能”象你说的这种需求,硬写到一个SQL里面是可以的,但是我还是推荐使用PL/SQL来完成,
一行一行写清楚,这样一端时间后你再拿出来,稍微看一下就可以进行修改,写成一个的话就麻烦多了