各位大蝦好﹗
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 語句還沒有用過。先謝謝大家﹗
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 語句還沒有用過。先謝謝大家﹗
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
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>
for 后面的'cur ' 是什么意思﹐是不是跟據IN后面的內容改變而改變﹐ 對了可不可以告訴我﹐你的QQ﹐或者MSN號碼啊﹐我的QQ是158318310