質問編集履歴

4

insert内容修正

2019/12/19 23:59

投稿

nemui_00
nemui_00

スコア5

test CHANGED
File without changes
test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
  -- INSERT
130
130
 
131
- insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID1',null,2,null);
131
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID1',null,1,null);
132
132
 
133
133
  insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID2','ID1',4,2);
134
134
 

3

sql誤り修正

2019/12/19 23:59

投稿

nemui_00
nemui_00

スコア5

test CHANGED
File without changes
test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
  , VL_ITEM 数量
84
84
 
85
- , (PRIOR 数量 * RT_PARENT) 計算後数量
85
+ , (PRIOR VL_ITEM * RT_PARENT) 計算後数量
86
86
 
87
87
  FROM
88
88
 

2

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

2019/12/19 23:57

投稿

nemui_00
nemui_00

スコア5

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,14 @@
1
1
  Oracleの階層問い合わせで、親の数量と親に対する数量を元に子の数量を順次計算していくことは可能でしょうか?
2
2
 
3
- 以下のようなテーブルで最上位の数量が変更された場合、子の数量を再計算したいです。
3
+ 以下のようなテーブルで**最上位の数量が変更された場合、子の数量を再計算したい**です。
4
4
 
5
5
 
6
6
 
7
+ - **更新前**
8
+
9
+
10
+
7
- |ID|親ID|親に対する必要数|数量(求めたい値)|
11
+ |ID|親ID|親に対する必要数|数量|
8
12
 
9
13
  |:--|:--:|--:|--:|
10
14
 
@@ -18,9 +22,51 @@
18
22
 
19
23
 
20
24
 
25
+
26
+
27
+ - **更新後(ID1の数量を2→1に更新)**
28
+
29
+
30
+
31
+ |ID|親ID|親に対する必要数|数量|
32
+
33
+ |:--|:--:|--:|--:|
34
+
35
+ |ID1|||**1**|
36
+
37
+ |ID2|ID1|2|4|
38
+
39
+ |ID3|ID2|3|12|
40
+
41
+ |ID4|ID2|1|4|
42
+
43
+
44
+
45
+
46
+
47
+ - **更新後テーブルから求めたい結果**
48
+
49
+ 親の数量*親に対する必要数で子の数量を再計算
50
+
51
+
52
+
53
+ |ID|親ID|親に対する必要数|数量(求めたい値)|備考|
54
+
55
+ |:--|:--:|--:|--:|:--|
56
+
57
+ |ID1|||1|最上位|
58
+
21
- 下記のSQLではうまくいきませんでした。(計算後数量カラムが存在しないため)
59
+ |ID2|ID1|2|**2**|1(親数量)*2(親に対する必要数)|
60
+
61
+ |ID3|ID2|3|**6**|2(親数量)*3(親に対する必要数)|
62
+
63
+ |ID4|ID2|1|**2**|2(親数量)*1(親に対する必要数)|
64
+
65
+
22
66
 
23
67
  どなたかよい方法があればご教示お願い致します。
68
+
69
+ 以下のSQLがやりたいことに近いのですが、最上位の子までしか計算できません。
24
70
 
25
71
  ```sql
26
72
 
@@ -36,7 +82,7 @@
36
82
 
37
83
  , VL_ITEM 数量
38
84
 
39
- , (PRIOR 計算後数量 * RT_PARENT) 計算後数量
85
+ , (PRIOR 数量 * RT_PARENT) 計算後数量
40
86
 
41
87
  FROM
42
88
 

1

CREATE INSERT追加 テーブル名修正

2019/12/19 23:52

投稿

nemui_00
nemui_00

スコア5

test CHANGED
File without changes
test CHANGED
@@ -32,22 +32,64 @@
32
32
 
33
33
  , ID_PARENT
34
34
 
35
- , 親に対する必要数
35
+ , RT_PARENT 親に対する必要数
36
36
 
37
- , 数量
37
+ , VL_ITEM 数量
38
38
 
39
- , (PRIOR 計算後数量 * 親に対する必要数) 計算後数量
39
+ , (PRIOR 計算後数量 * RT_PARENT) 計算後数量
40
40
 
41
41
  FROM
42
42
 
43
- TABLE
43
+ TEST
44
44
 
45
45
  START WITH
46
46
 
47
- ID = 'ID'
47
+ ID = 'ID1'
48
48
 
49
49
  CONNECT BY
50
50
 
51
- PRIOR ID = ID_PARENT
51
+ PRIOR ID = ID_PARENT;
52
+
53
+
54
+
55
+ -- CREATE
56
+
57
+ create table TEST (
58
+
59
+ ID VARCHAR2(5)
60
+
61
+ , ID_PARENT VARCHAR2(5)
62
+
63
+ , VL_ITEM NUMBER(4,0)
64
+
65
+ , RT_PARENT NUMBER(4,0)
66
+
67
+ , constraint TEST_PKC primary key (ID)
68
+
69
+ ) ;
70
+
71
+
72
+
73
+ comment on column TEST.ID is 'ID';
74
+
75
+ comment on column TEST.ID_PARENT is '親ID';
76
+
77
+ comment on column TEST.VL_ITEM is '数量';
78
+
79
+ comment on column TEST.RT_PARENT is '親に対する必要数';
80
+
81
+
82
+
83
+ -- INSERT
84
+
85
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID1',null,2,null);
86
+
87
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID2','ID1',4,2);
88
+
89
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID3','ID2',12,3);
90
+
91
+ insert into TEST(ID,ID_PARENT,VL_ITEM,RT_PARENT) values ('ID4','ID2',4,1);
92
+
93
+
52
94
 
53
95
  ```