Oracleの階層問い合わせで、親の数量と親に対する数量を元に子の数量を順次計算していくことは可能でしょうか?
以下のようなテーブルで最上位の数量が変更された場合、子の数量を再計算したいです。
- 更新前
ID | 親ID | 親に対する必要数 | 数量 |
---|---|---|---|
ID1 | 2 | ||
ID2 | ID1 | 2 | 4 |
ID3 | ID2 | 3 | 12 |
ID4 | ID2 | 1 | 4 |
- 更新後(ID1の数量を2→1に更新)
ID | 親ID | 親に対する必要数 | 数量 |
---|---|---|---|
ID1 | 1 | ||
ID2 | ID1 | 2 | 4 |
ID3 | ID2 | 3 | 12 |
ID4 | ID2 | 1 | 4 |
- 更新後テーブルから求めたい結果
親の数量*親に対する必要数で子の数量を再計算
ID | 親ID | 親に対する必要数 | 数量(求めたい値) | 備考 |
---|---|---|---|---|
ID1 | 1 | 最上位 | ||
ID2 | ID1 | 2 | 2 | 1(親数量)*2(親に対する必要数) |
ID3 | ID2 | 3 | 6 | 2(親数量)*3(親に対する必要数) |
ID4 | ID2 | 1 | 2 | 2(親数量)*1(親に対する必要数) |
どなたかよい方法があればご教示お願い致します。
以下のSQLがやりたいことに近いのですが、最上位の子までしか計算できません。
sql
1SELECT DISTINCT 2 LEVEL 3 , ID 4 , ID_PARENT 5 , RT_PARENT 親に対する必要数 6 , VL_ITEM 数量 7 , (PRIOR VL_ITEM * RT_PARENT) 計算後数量 8FROM 9 TEST 10START WITH 11 ID = 'ID1' 12CONNECT BY 13 PRIOR ID = ID_PARENT; 14 15-- CREATE 16create table TEST ( 17 ID VARCHAR2(5) 18 , ID_PARENT VARCHAR2(5) 19 , VL_ITEM NUMBER(4,0) 20 , RT_PARENT NUMBER(4,0) 21 , constraint TEST_PKC primary key (ID) 22) ; 23 24comment on column TEST.ID is 'ID'; 25comment on column TEST.ID_PARENT is '親ID'; 26comment on column TEST.VL_ITEM is '数量'; 27comment on column TEST.RT_PARENT is '親に対する必要数'; 28 29-- INSERT 30insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID1',null,1,null); 31insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID2','ID1',4,2); 32insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID3','ID2',12,3); 33insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID4','ID2',4,1); 34
回答2件
あなたの回答
tips
プレビュー