各位大蝦好﹗
yaozw_mountain(山林)  bzszp(SongZip) ( ) 
先要謝謝兩位今天下午的幫助。
有表如下﹐
create table tb_fittzs
(
  fitts_no           varchar2(4)          not null, //配件
  fitt_no            varchar2(4)          not null, //配件 
  fitt_qty           number(2)            not null, //數量 
  constraint Pk_tb_fittzz primary key (fitts_no,fitt_no)

不知以下的計算數量的SQL語句如何寫﹐隨便輸入一個配件﹐我想得到這個配件是中那些配件組成﹐(包括它的直接組成配件﹐還有間接組成配件﹐也就是它的子配件﹐子子配件﹐子子子配件 ﹐....組成數量)
如﹐配件1 是由配件2﹐3﹐4組成
    配件2 是由配件3﹐4﹐5組成
    配件5 配件6﹐7﹐組成表中數擾為
fitts_no  fitt_no   fitt_qty  
1          ﹐ 2      ﹐ 2
1          ﹐ 3      ﹐ 2
1          ﹐ 4      ﹐ 1
2          ﹐ 3      ﹐ 2
2          ﹐ 4      ﹐ 2
2          ﹐ 5      ﹐ 3
5          ﹐ 6      ﹐ 1
5          ﹐ 7      ﹐ 2 
如果是配件1
fitt_no   fitt_qty  
  2         ,  2
  3         ,  6
  4         ,  5
  5         ,  6
  6         ,  6
  7         ,  12如果是配件2
  3  ,  2 
  4  ,  2
  5  ,  3
  6  ,  3
  7  ,  6  如果是配件5
  6   ,  1
  7   ,  2 
 請問這么樣的SQL語句怎么寫﹐是寫函數好﹐還是寫過程好﹐
select fitt_no, nvl(prior fitt_qty ,1) * fitt_qty as fitt_qty 
from tb_fittzs t
start with t.fitts_no ='1' 
connect by  fitts_no = prior fitt_no得到的結果是
fitt_no fitt_qry
  2    ,   2
  3    ,   6
  4    ,   5
  5    ,   6
  6    ,   3
  7    ,   6我用這樣一條語句。但它只計算相鄰的兩個乘起來﹐﹐而不能累乘﹐要累乘要怎么辦﹐之后相同的配件還要相加﹐
也就是要出現這樣的一個結果
如果是配件1
fitt_no   fitt_qry
   2  ,     2
   3  ,     6
   4  ,     5
   5  ,     6
   6  ,     6
   7  ,     12
還有請問 怎樣把它們一條一條的讀出來啊﹐start with ...connect by prior 語句還沒有用過。先謝謝大家﹗

解决方案 »

  1.   

    select fitt_no, sum(nvl(prior fitt_qty ,1) * fitt_qty) as fitt_qty 
    from tb_fittzs t
    start with t.fitts_no ='1' 
    connect by  fitts_no = prior fitt_no
    group by  fitt_no
    ;fitt_no fitt_qry
      2    ,   2
      3    ,   6
      4    ,   5
      5    ,   6
      6    ,   3
      7    ,   6
      

  2.   

    需要自己写一个函数处理一下:
    SQL> select * from tb_fittzs;FITT FITT   FITT_QTY
    ---- ---- ----------
    1    2             2
    1    3             2
    1    4             1
    2    3             2
    2    4             2
    2    5             3
    5    6             1
    5    7             2已选择8行。SQL> create or replace function fun_muti(vfitts_no number,vfitt_no number)
      2  return number as
      3  vrtn number:=1;
      4  begin
      5  for cur in (select fitts_no,fitt_no,fitt_qty from tb_fittzs 
      6  start with fitts_no=vfitts_no and fitt_no=vfitt_no
      7  connect by prior fitts_no=fitt_no) loop
      8   vrtn := vrtn * cur.fitt_qty;
      9  end loop;
     10  return vrtn;
     11  end fun_muti;
     12  /函数已创建。SQL> select fitt_no,sum(fun_muti(fitts_no,fitt_no)) qty from tb_fittzs
      2  start with fitts_no=1  connect by prior fitt_no=fitts_no group by fitt_no;FITT        QTY
    ---- ----------
    2             2
    3             6
    4             5
    5             6
    6             6
    7            12已选择6行。SQL>
      

  3.   

    bzszp(SongZip) 你好﹗ 我想問一下
     
     for 后面的'cur ' 是什么意思﹐是不是跟據IN后面的內容改變而改變﹐ 對了可不可以告訴我﹐你的QQ﹐或者MSN號碼啊﹐我的QQ是158318310