teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

insert内容修正

2019/12/19 23:59

投稿

nemui_00
nemui_00

スコア5

title CHANGED
File without changes
body CHANGED
@@ -63,7 +63,7 @@
63
63
  comment on column TEST.RT_PARENT is '親に対する必要数';
64
64
 
65
65
  -- INSERT
66
- insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID1',null,2,null);
66
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID1',null,1,null);
67
67
  insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID2','ID1',4,2);
68
68
  insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID3','ID2',12,3);
69
69
  insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID4','ID2',4,1);

3

sql誤り修正

2019/12/19 23:59

投稿

nemui_00
nemui_00

スコア5

title CHANGED
File without changes
body CHANGED
@@ -40,7 +40,7 @@
40
40
  , ID_PARENT
41
41
  , RT_PARENT 親に対する必要数
42
42
  , VL_ITEM 数量
43
- , (PRIOR 数量 * RT_PARENT) 計算後数量
43
+ , (PRIOR VL_ITEM * RT_PARENT) 計算後数量
44
44
  FROM
45
45
  TEST
46
46
  START WITH

2

求めたい結果について説明を追記しました。

2019/12/19 23:57

投稿

nemui_00
nemui_00

スコア5

title CHANGED
File without changes
body CHANGED
@@ -1,15 +1,38 @@
1
1
  Oracleの階層問い合わせで、親の数量と親に対する数量を元に子の数量を順次計算していくことは可能でしょうか?
2
- 以下のようなテーブルで最上位の数量が変更された場合、子の数量を再計算したいです。
2
+ 以下のようなテーブルで**最上位の数量が変更された場合、子の数量を再計算したい**です。
3
3
 
4
+ - **更新前**
5
+
4
- |ID|親ID|親に対する必要数|数量(求めたい値)|
6
+ |ID|親ID|親に対する必要数|数量|
5
7
  |:--|:--:|--:|--:|
6
8
  |ID1|||2|
7
9
  |ID2|ID1|2|4|
8
10
  |ID3|ID2|3|12|
9
11
  |ID4|ID2|1|4|
10
12
 
13
+
14
+ - **更新後(ID1の数量を2→1に更新)**
15
+
16
+ |ID|親ID|親に対する必要数|数量|
17
+ |:--|:--:|--:|--:|
18
+ |ID1|||**1**|
19
+ |ID2|ID1|2|4|
20
+ |ID3|ID2|3|12|
21
+ |ID4|ID2|1|4|
22
+
23
+
24
+ - **更新後テーブルから求めたい結果**
25
+ 親の数量*親に対する必要数で子の数量を再計算
26
+
27
+ |ID|親ID|親に対する必要数|数量(求めたい値)|備考|
28
+ |:--|:--:|--:|--:|:--|
29
+ |ID1|||1|最上位|
11
- 下記のSQLではうまくいきませんでした。(計算後数量カラムが存在しないため)
30
+ |ID2|ID1|2|**2**|1(親数量)*2(親に対する必要数)|
31
+ |ID3|ID2|3|**6**|2(親数量)*3(親に対する必要数)|
32
+ |ID4|ID2|1|**2**|2(親数量)*1(親に対する必要数)|
33
+
12
34
  どなたかよい方法があればご教示お願い致します。
35
+ 以下のSQLがやりたいことに近いのですが、最上位の子までしか計算できません。
13
36
  ```sql
14
37
  SELECT DISTINCT
15
38
  LEVEL
@@ -17,7 +40,7 @@
17
40
  , ID_PARENT
18
41
  , RT_PARENT 親に対する必要数
19
42
  , VL_ITEM 数量
20
- , (PRIOR 計算後数量 * RT_PARENT) 計算後数量
43
+ , (PRIOR 数量 * RT_PARENT) 計算後数量
21
44
  FROM
22
45
  TEST
23
46
  START WITH

1

CREATE INSERT追加 テーブル名修正

2019/12/19 23:52

投稿

nemui_00
nemui_00

スコア5

title CHANGED
File without changes
body CHANGED
@@ -15,13 +15,34 @@
15
15
  LEVEL
16
16
  , ID
17
17
  , ID_PARENT
18
- , 親に対する必要数
18
+ , RT_PARENT 親に対する必要数
19
- , 数量
19
+ , VL_ITEM 数量
20
- , (PRIOR 計算後数量 * 親に対する必要数) 計算後数量
20
+ , (PRIOR 計算後数量 * RT_PARENT) 計算後数量
21
21
  FROM
22
- TABLE
22
+ TEST
23
23
  START WITH
24
- ID = 'ID'
24
+ ID = 'ID1'
25
25
  CONNECT BY
26
- PRIOR ID = ID_PARENT
26
+ PRIOR ID = ID_PARENT;
27
+
28
+ -- CREATE
29
+ create table TEST (
30
+ ID VARCHAR2(5)
31
+ , ID_PARENT VARCHAR2(5)
32
+ , VL_ITEM NUMBER(4,0)
33
+ , RT_PARENT NUMBER(4,0)
34
+ , constraint TEST_PKC primary key (ID)
35
+ ) ;
36
+
37
+ comment on column TEST.ID is 'ID';
38
+ comment on column TEST.ID_PARENT is '親ID';
39
+ comment on column TEST.VL_ITEM is '数量';
40
+ comment on column TEST.RT_PARENT is '親に対する必要数';
41
+
42
+ -- INSERT
43
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID1',null,2,null);
44
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID2','ID1',4,2);
45
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID3','ID2',12,3);
46
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID4','ID2',4,1);
47
+
27
48
  ```