質問編集履歴

3

実行結果の修正

2023/05/23 08:43

投稿

a5i
a5i

スコア1

test CHANGED
File without changes
test CHANGED
@@ -160,7 +160,8 @@
160
160
 
161
161
  ### 実行結果
162
162
 
163
+ 〇誤
163
- 実際に更新される実績履歴テーブル
164
+ 実際に更新された情報
164
165
  |契約NO|契約年月日|取消年月日|金額|登録年月日|登録時間|明細NO|
165
166
  |:--|:--:|:--:|:--:|:--:|:--:|--:|
166
167
  |A1|2023/02/15|2023/04/05|3,000|2023/02/15|170000|1|
@@ -169,8 +170,8 @@
169
170
  |A1|2023/03/15|NULL|3,000|2023/03/15|170000|2|
170
171
  |A1|2023/03/15|2023/04/05|3,000|2023/04/05|170000|2|
171
172
 
172
-
173
+ 〇正
173
- 更新し実績履歴テーブル
174
+ 本当はこのように更新されてほしい
174
175
  |契約NO|契約年月日|取消年月日|金額|登録年月日|登録時間|明細NO|
175
176
  |:--|:--:|:--:|:--:|:--:|:--:|--:|
176
177
  |A1|2023/02/15|2023/04/05|3,000|2023/02/15|170000|1|

2

初心者マーク、タイトル編集

2023/05/23 06:14

投稿

a5i
a5i

スコア1

test CHANGED
@@ -1 +1 @@
1
- 2つのテーブルからデータを抽出し、値を更新するには
1
+ 2つのテーブルからデータを抽出し、値を更新するSQLを作成したい
test CHANGED
File without changes

1

CREATE文、INSERT文の追加

2023/05/23 05:28

投稿

a5i
a5i

スコア1

test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,35 @@
22
22
  |A1|2023/03/15|NULL|3,000|2023/03/15|170000|2|
23
23
  |A1|2023/03/15|NULL|3,000|2023/04/05|170000|2|
24
24
 
25
+ ```ここに言語を入力
26
+ CREATE TABLE 実績履歴
27
+ (
28
+ 契約NO CHAR(20),
29
+ 契約年月日 DATE,
30
+ 取消年月日 DATE,
31
+ 金額 NUMBER(11,0),
32
+ 登録年月日 DATE,
33
+ 登録時間 VARCHAR2(7),
34
+ 明細NO NUMBER(3,0)
35
+ )
36
+ /
37
+ INSERT INTO 実績履歴
38
+ VALUES ('A1','2023/02/15',NULL,'3000','2023/02/15','170000','1')
39
+ /
40
+ INSERT INTO 実績履歴
41
+ VALUES ('A1','2023/02/15',NULL,'3000','2023/04/05','170000','1')
42
+ /
43
+ INSERT INTO 実績履歴
44
+ VALUES ('A1','2023/02/15',NULL,'3000','2023/04/05','180000','1')
45
+ /
46
+ INSERT INTO 実績履歴
47
+ VALUES ('A1','2023/03/15',NULL,'3000','2023/03/15','170000','2')
48
+ /
49
+ INSERT INTO 実績履歴
50
+ VALUES ('A1','2023/03/15',NULL,'3000','2023/04/05','170000','2')
51
+ /
52
+ ```
53
+
25
54
 
26
55
  消込履歴テーブル(一部抜粋)
27
56
  |契約NO|契約年月日|取消年月日|金額|明細NO|
@@ -30,6 +59,26 @@
30
59
  |A1|2023/02/15|2023/04/05|3,000|1|
31
60
  |A1|2023/03/15|2023/04/05|3,000|2|
32
61
 
62
+ ```ここに言語を入力
63
+ CREATE TABLE 取消履歴
64
+ (
65
+ 契約NO CHAR(20),
66
+ 契約年月日 DATE,
67
+ 取消年月日 DATE,
68
+ 金額 NUMBER(11,0),
69
+ 明細NO NUMBER(3,0)
70
+ )
71
+ /
72
+ INSERT INTO 取消履歴
73
+ VALUES ('A1','2023/02/15','2023/04/05','3000','1')
74
+ /
75
+ INSERT INTO 取消履歴
76
+ VALUES ('A1','2023/02/15','2023/04/05','3000','1')
77
+ /
78
+ INSERT INTO 取消履歴
79
+ VALUES ('A1','2023/03/15','2023/04/05','3000','2')
80
+ /
81
+ ```
33
82
 
34
83
 
35
84
  ### 発生している問題
@@ -40,30 +89,8 @@
40
89
  FORでSELECTを回して更新データを抽出しているのですが
41
90
  W_CNTの指定がおかしいと思われますがどう修正すればいいかわからず詰まってしまっています。
42
91
 
43
- 正しく更新された場合の実績履歴テーブル
44
- |契約NO|契約年月日|取消年月日|金額|登録年月日|登録時間|明細NO|
45
- |:--|:--:|:--:|:--:|:--:|:--:|--:|
46
- |A1|2023/02/15|2023/04/05|3,000|2023/02/15|170000|1|
47
- |A1|2023/02/15|2023/04/05|3,000|2023/04/05|170000|1|
48
- |A1|2023/02/15|NULL|3,000|2023/04/05|180000|1|
49
- |A1|2023/03/15|2023/04/05|3,000|2023/03/15|170000|2|
50
- |A1|2023/03/15|NULL|3,000|2023/04/05|170000|2|
51
-
52
-
53
- 実際に更新される実績履歴テーブル
54
- |契約NO|契約年月日|取消年月日|金額|登録年月日|登録時間|明細NO|
55
- |:--|:--:|:--:|:--:|:--:|:--:|--:|
56
- |A1|2023/02/15|2023/04/05|3,000|2023/02/15|170000|1|
57
- |A1|2023/02/15|NULL|3,000|2023/04/05|170000|1|
58
- |A1|2023/02/15|2023/04/05|3,000|2023/04/05|180000|1|
59
- |A1|2023/03/15|NULL|3,000|2023/03/15|170000|2|
60
- |A1|2023/03/15|2023/04/05|3,000|2023/04/05|170000|2|
61
-
62
-
63
-
64
92
  > 2. 完全一致の行が複数ある場合、「登録年月日」「登録時間」「明細NO」が小さいものから順に取消年月日を更新。
65
-
66
- 小さいものが取得できていない
93
+ 小さいものが取得できてません
67
94
 
68
95
  ### 該当のソースコード
69
96
 
@@ -131,13 +158,37 @@
131
158
  END LOOP;
132
159
  ```
133
160
 
134
- ### 改善点?
161
+ ### 実行結果
162
+
163
+ 実際に更新される実績履歴テーブル
164
+ |契約NO|契約年月日|取消年月日|金額|登録年月日|登録時間|明細NO|
165
+ |:--|:--:|:--:|:--:|:--:|:--:|--:|
166
+ |A1|2023/02/15|2023/04/05|3,000|2023/02/15|170000|1|
167
+ |A1|2023/02/15|NULL|3,000|2023/04/05|170000|1|
168
+ |A1|2023/02/15|2023/04/05|3,000|2023/04/05|180000|1|
169
+ |A1|2023/03/15|NULL|3,000|2023/03/15|170000|2|
170
+ |A1|2023/03/15|2023/04/05|3,000|2023/04/05|170000|2|
171
+
172
+
173
+ 更新したい実績履歴テーブル
174
+ |契約NO|契約年月日|取消年月日|金額|登録年月日|登録時間|明細NO|
175
+ |:--|:--:|:--:|:--:|:--:|:--:|--:|
176
+ |A1|2023/02/15|2023/04/05|3,000|2023/02/15|170000|1|
177
+ |A1|2023/02/15|2023/04/05|3,000|2023/04/05|170000|1|
178
+ |A1|2023/02/15|NULL|3,000|2023/04/05|180000|1|
179
+ |A1|2023/03/15|2023/04/05|3,000|2023/03/15|170000|2|
180
+ |A1|2023/03/15|NULL|3,000|2023/04/05|170000|2|
181
+
182
+
183
+ ### 調査したこと、試したこと
135
184
 
136
185
  ①W_CNT の指定方法をどうにかする必要あり。
137
186
 
138
187
  ②partition byを利用したら上手くいくかも?
139
188
 
140
189
  > ROW_NUMBER() OVER(ORDER BY 実績.登録年月日 ASC, 実績.登録時間 ASC, 実績.明細NO ASC ) AS 順番
190
+
191
+
141
192
 
142
193
  ---
143
194