質問編集履歴

6

プラス追加

2021/01/10 05:13

投稿

mochiwo
mochiwo

スコア8

test CHANGED
File without changes
test CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
 
6
6
 
7
- あるIDの人(`ID`列) がイベントAとイベントB(`event`列)を経験した場合、複数行に分かれて格納されているデータがございます。このイベントAとイベントBの2行が、同一日(`event_date`列)である場合に、2行をまとめてしまってevent列を「AB」という文字列に変換したいと考えております。
7
+ あるIDの人(`ID`列) がイベントAとイベントB(`event`列)を経験した場合、複数行に分かれて格納されているデータがございます。このイベントAとイベントBの2行が、同一日(`event_date`列)である場合に、2行をまとめてしまってevent列を「A+B」という文字列に変換したいと考えております。
8
8
 
9
9
 
10
10
 
11
11
  たとえば、以下のBeforeの1行目と2行目はどちらも`ID`=100, `event_date` = 20140401で同一ID、同一日付となっています。
12
12
 
13
- この2行の`event`をAfterの1行目のようにABにして、Viewを作成したいと考えております。
13
+ この2行の`event`をAfterの1行目のようにA+Bにして、Viewを作成したいと考えております。
14
14
 
15
15
  event_dateに同一日付の時刻違いのデータはございません。
16
16
 

5

Afterクエリ削除

2021/01/10 05:13

投稿

mochiwo
mochiwo

スコア8

test CHANGED
File without changes
test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
- なお、上記サンプルデータを作成したクエリは以下でございます。
45
+ なお、Beforeのサンプルデータを作成したクエリは以下でございます。
46
46
 
47
47
 
48
48
 
@@ -103,57 +103,3 @@
103
103
  ;
104
104
 
105
105
  ```
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
- ```sql
114
-
115
- --After
116
-
117
- CREATE TABLE Tbl
118
-
119
- (ID int, EVENT varchar2(2), EVENT_DATE int)
120
-
121
- ;
122
-
123
-
124
-
125
- INSERT ALL
126
-
127
- INTO Tbl (ID, EVENT, EVENT_DATE)
128
-
129
- VALUES (100, 'AB', 20140401)
130
-
131
- INTO Tbl (ID, EVENT, EVENT_DATE)
132
-
133
- VALUES (100, 'C', 20140408)
134
-
135
- INTO Tbl (ID, EVENT, EVENT_DATE)
136
-
137
- VALUES (200, 'A', 20140901)
138
-
139
- INTO Tbl (ID, EVENT, EVENT_DATE)
140
-
141
- VALUES (200, 'C', 20150401)
142
-
143
- INTO Tbl (ID, EVENT, EVENT_DATE)
144
-
145
- VALUES (300, 'AB', 20160401)
146
-
147
- INTO Tbl (ID, EVENT, EVENT_DATE)
148
-
149
- VALUES (300, 'D', 20160401)
150
-
151
- INTO Tbl (ID, EVENT, EVENT_DATE)
152
-
153
- VALUES (300, 'C', 20170501)
154
-
155
- SELECT * FROM dual
156
-
157
- ;
158
-
159
- ```

4

修正3

2021/01/10 05:12

投稿

mochiwo
mochiwo

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,8 @@
1
1
  ご質問です。
2
+
3
+ データベースはOracleで、バージョンは11g R2です。
4
+
5
+
2
6
 
3
7
  あるIDの人(`ID`列) がイベントAとイベントB(`event`列)を経験した場合、複数行に分かれて格納されているデータがございます。このイベントAとイベントBの2行が、同一日(`event_date`列)である場合に、2行をまとめてしまってevent列を「AB」という文字列に変換したいと考えております。
4
8
 
@@ -6,7 +10,9 @@
6
10
 
7
11
  たとえば、以下のBeforeの1行目と2行目はどちらも`ID`=100, `event_date` = 20140401で同一ID、同一日付となっています。
8
12
 
9
- この2行の`event`をAfterの1行目のようにABにしたいと考えてます。
13
+ この2行の`event`をAfterの1行目のようにABにして、Viewを作成したいと考えております。
14
+
15
+ event_dateに同一日付の時刻違いのデータはございません。
10
16
 
11
17
 
12
18
 
@@ -18,7 +24,7 @@
18
24
 
19
25
  Before:
20
26
 
21
- ![イメージ説明](4e81b4854773ceedf0d53c4db69b668a.png)
27
+ ![イメージ説明](28f32ca4c8b9cfb2735c61882ee488d8.png)
22
28
 
23
29
 
24
30
 
@@ -26,7 +32,7 @@
26
32
 
27
33
  After:
28
34
 
29
- ![イメージ説明](29de60a7a7421076e81235ca2d876161.png)
35
+ ![イメージ説明](c6183ff03d0b057b614ab0679d228d09.png)
30
36
 
31
37
 
32
38
 
@@ -48,7 +54,7 @@
48
54
 
49
55
  CREATE TABLE Tbl
50
56
 
51
- ("ID" int, "event" varchar2(1), "event_date" int)
57
+ (ID int, event varchar2(1), event_date int)
52
58
 
53
59
  ;
54
60
 
@@ -56,39 +62,39 @@
56
62
 
57
63
  INSERT ALL
58
64
 
59
- INTO Tbl ("ID", "event", "event_date")
65
+ INTO Tbl (ID, event, event_date)
60
66
 
61
67
  VALUES (100, 'A', 20140401)
62
68
 
63
- INTO Tbl ("ID", "event", "event_date")
69
+ INTO Tbl (ID, event, event_date)
64
70
 
65
71
  VALUES (100, 'B', 20140401)
66
72
 
67
- INTO Tbl ("ID", "event", "event_date")
73
+ INTO Tbl (ID, event, event_date)
68
74
 
69
75
  VALUES (100, 'C', 20140408)
70
76
 
71
- INTO Tbl ("ID", "event", "event_date")
77
+ INTO Tbl (ID, event, event_date)
72
78
 
73
79
  VALUES (200, 'A', 20140901)
74
80
 
75
- INTO Tbl ("ID", "event", "event_date")
81
+ INTO Tbl (ID, event, event_date)
76
82
 
77
83
  VALUES (200, 'C', 20150401)
78
84
 
79
- INTO Tbl ("ID", "event", "event_date")
85
+ INTO Tbl (ID, event, event_date)
80
86
 
81
87
  VALUES (300, 'A', 20160401)
82
88
 
83
- INTO Tbl ("ID", "event", "event_date")
89
+ INTO Tbl (ID, event, event_date)
84
90
 
85
91
  VALUES (300, 'B', 20160401)
86
92
 
87
- INTO Tbl ("ID", "event", "event_date")
93
+ INTO Tbl (ID, event, event_date)
88
94
 
89
95
  VALUES (300, 'D', 20160401)
90
96
 
91
- INTO Tbl ("ID", "event", "event_date")
97
+ INTO Tbl (ID, event, event_date)
92
98
 
93
99
  VALUES (300, 'C', 20170501)
94
100
 
@@ -110,7 +116,7 @@
110
116
 
111
117
  CREATE TABLE Tbl
112
118
 
113
- ("ID" int, "event" varchar2(2), "event_date" int)
119
+ (ID int, EVENT varchar2(2), EVENT_DATE int)
114
120
 
115
121
  ;
116
122
 
@@ -118,31 +124,31 @@
118
124
 
119
125
  INSERT ALL
120
126
 
121
- INTO Tbl ("ID", "event", "event_date")
127
+ INTO Tbl (ID, EVENT, EVENT_DATE)
122
128
 
123
129
  VALUES (100, 'AB', 20140401)
124
130
 
125
- INTO Tbl ("ID", "event", "event_date")
131
+ INTO Tbl (ID, EVENT, EVENT_DATE)
126
132
 
127
133
  VALUES (100, 'C', 20140408)
128
134
 
129
- INTO Tbl ("ID", "event", "event_date")
135
+ INTO Tbl (ID, EVENT, EVENT_DATE)
130
136
 
131
137
  VALUES (200, 'A', 20140901)
132
138
 
133
- INTO Tbl ("ID", "event", "event_date")
139
+ INTO Tbl (ID, EVENT, EVENT_DATE)
134
140
 
135
141
  VALUES (200, 'C', 20150401)
136
142
 
137
- INTO Tbl ("ID", "event", "event_date")
143
+ INTO Tbl (ID, EVENT, EVENT_DATE)
138
144
 
139
145
  VALUES (300, 'AB', 20160401)
140
146
 
141
- INTO Tbl ("ID", "event", "event_date")
147
+ INTO Tbl (ID, EVENT, EVENT_DATE)
142
148
 
143
149
  VALUES (300, 'D', 20160401)
144
150
 
145
- INTO Tbl ("ID", "event", "event_date")
151
+ INTO Tbl (ID, EVENT, EVENT_DATE)
146
152
 
147
153
  VALUES (300, 'C', 20170501)
148
154
 
@@ -150,6 +156,4 @@
150
156
 
151
157
  ;
152
158
 
153
-
154
-
155
159
  ```

3

修正2

2021/01/10 05:10

投稿

mochiwo
mochiwo

スコア8

test CHANGED
File without changes
test CHANGED
@@ -48,35 +48,51 @@
48
48
 
49
49
  CREATE TABLE Tbl
50
50
 
51
- (`ID` int, `event` varchar(1), `event_date` int)
51
+ ("ID" int, "event" varchar2(1), "event_date" int)
52
52
 
53
53
  ;
54
54
 
55
-
56
55
 
57
- INSERT INTO Tbl
58
56
 
59
- (`ID`, `event`, `event_date`)
57
+ INSERT ALL
60
58
 
61
- VALUES
59
+ INTO Tbl ("ID", "event", "event_date")
62
60
 
63
- (100, 'A', 20140401),
61
+ VALUES (100, 'A', 20140401)
64
62
 
65
- (100, 'B', 20140401),
63
+ INTO Tbl ("ID", "event", "event_date")
66
64
 
67
- (100, 'C', 20140408),
65
+ VALUES (100, 'B', 20140401)
68
66
 
69
- (200, 'A', 20140901),
67
+ INTO Tbl ("ID", "event", "event_date")
70
68
 
71
- (200, 'C', 20150401),
69
+ VALUES (100, 'C', 20140408)
72
70
 
73
- (300, 'A', 20160401),
71
+ INTO Tbl ("ID", "event", "event_date")
74
72
 
75
- (300, 'B', 20160401),
73
+ VALUES (200, 'A', 20140901)
76
74
 
77
- (300, 'D', 20160401),
75
+ INTO Tbl ("ID", "event", "event_date")
78
76
 
77
+ VALUES (200, 'C', 20150401)
78
+
79
+ INTO Tbl ("ID", "event", "event_date")
80
+
81
+ VALUES (300, 'A', 20160401)
82
+
83
+ INTO Tbl ("ID", "event", "event_date")
84
+
85
+ VALUES (300, 'B', 20160401)
86
+
87
+ INTO Tbl ("ID", "event", "event_date")
88
+
89
+ VALUES (300, 'D', 20160401)
90
+
91
+ INTO Tbl ("ID", "event", "event_date")
92
+
79
- (300, 'C', 20170501)
93
+ VALUES (300, 'C', 20170501)
94
+
95
+ SELECT * FROM dual
80
96
 
81
97
  ;
82
98
 
@@ -94,31 +110,43 @@
94
110
 
95
111
  CREATE TABLE Tbl
96
112
 
97
- (`ID` int, `event` varchar(2), `event_date` int)
113
+ ("ID" int, "event" varchar2(2), "event_date" int)
98
114
 
99
115
  ;
100
116
 
101
-
102
117
 
103
- INSERT INTO Tbl
104
118
 
105
- (`ID`, `event`, `event_date`)
119
+ INSERT ALL
106
120
 
107
- VALUES
121
+ INTO Tbl ("ID", "event", "event_date")
108
122
 
109
- (100, 'AB', 20140401),
123
+ VALUES (100, 'AB', 20140401)
110
124
 
111
- (100, 'C', 20140408),
125
+ INTO Tbl ("ID", "event", "event_date")
112
126
 
113
- (200, 'A', 20140901),
127
+ VALUES (100, 'C', 20140408)
114
128
 
115
- (200, 'C', 20150401),
129
+ INTO Tbl ("ID", "event", "event_date")
116
130
 
117
- (300, 'AB', 20160401),
131
+ VALUES (200, 'A', 20140901)
118
132
 
119
- (300, 'D', 20160401),
133
+ INTO Tbl ("ID", "event", "event_date")
120
134
 
135
+ VALUES (200, 'C', 20150401)
136
+
137
+ INTO Tbl ("ID", "event", "event_date")
138
+
139
+ VALUES (300, 'AB', 20160401)
140
+
141
+ INTO Tbl ("ID", "event", "event_date")
142
+
143
+ VALUES (300, 'D', 20160401)
144
+
145
+ INTO Tbl ("ID", "event", "event_date")
146
+
121
- (300, 'C', 20170501)
147
+ VALUES (300, 'C', 20170501)
148
+
149
+ SELECT * FROM dual
122
150
 
123
151
  ;
124
152
 

2

全体的な修正

2021/01/10 04:46

投稿

mochiwo
mochiwo

スコア8

test CHANGED
@@ -1 +1 @@
1
- 同一ID、同一日の異なるイベントをまとめたい
1
+ 同一ID、同一日複数行1行にまとめたうえで、他の列のセル値を結合した
test CHANGED
@@ -1,10 +1,14 @@
1
1
  ご質問です。
2
2
 
3
- 同じID、同じ日付にイベントAとイベントBを両方経験している場合に、「A+B」という文字列に変換して、2行を1行にまとめたいと考えております。
3
+ あるIDの人(`ID`列) がイベントAとイベントB(`event`列)を経験した場合、複数行に分かれ格納されているデータがございます。このイベントAとイベントBの2行が、同一日(`event_date`列)である場合に、2行をまとめてしまってevent列を「AB」という文字列に変換したいと考えております。
4
4
 
5
5
 
6
6
 
7
+ たとえば、以下のBeforeの1行目と2行目はどちらも`ID`=100, `event_date` = 20140401で同一ID、同一日付となっています。
8
+
7
- 具体的には、以下BeforeからAfterデータ整形をしたいと考えております。
9
+ 2行の`event`をAfterの1行目のようにABにしたいと考えてます。
10
+
11
+
8
12
 
9
13
  解決できるSQLクエリをご教示いただければ大変幸いです。
10
14
 
@@ -12,17 +16,19 @@
12
16
 
13
17
 
14
18
 
15
- **Before**
19
+ Before:
16
20
 
17
- ![Before: 整形前](b5d7ee1db19940b6371b63b7c163d9c8.png)
21
+ ![イメージ説明](4e81b4854773ceedf0d53c4db69b668a.png)
18
22
 
19
23
 
20
24
 
21
25
 
22
26
 
23
- **After**
27
+ After:
24
28
 
25
- ![After: 整形後](b60b781b9bb8c8c1e4bf409193dbd76f.png)
29
+ ![イメージ説明](29de60a7a7421076e81235ca2d876161.png)
30
+
31
+
26
32
 
27
33
 
28
34
 
@@ -34,63 +40,45 @@
34
40
 
35
41
 
36
42
 
43
+
44
+
37
45
  ```sql
38
46
 
39
- --Before:整形前
47
+ --Before
40
48
 
41
- CREATE TABLE tbl
49
+ CREATE TABLE Tbl
42
50
 
43
- ("ID" int, "event" varchar2(1), "date" timestamp)
51
+ (`ID` int, `event` varchar(1), `event_date` int)
44
52
 
45
53
  ;
46
54
 
55
+
47
56
 
57
+ INSERT INTO Tbl
48
58
 
59
+ (`ID`, `event`, `event_date`)
49
60
 
61
+ VALUES
50
62
 
51
- INSERT ALL
63
+ (100, 'A', 20140401),
52
64
 
53
- INTO tbl ("ID", "event", "date")
65
+ (100, 'B', 20140401),
54
66
 
55
- VALUES (100, 'A', '01-Apr-2014 12:00:00 AM')
67
+ (100, 'C', 20140408),
56
68
 
57
- INTO tbl ("ID", "event", "date")
69
+ (200, 'A', 20140901),
58
70
 
59
- VALUES (100, 'B', '01-Apr-2014 12:00:00 AM')
71
+ (200, 'C', 20150401),
60
72
 
61
- INTO tbl ("ID", "event", "date")
73
+ (300, 'A', 20160401),
62
74
 
63
- VALUES (100, 'C', '08-Apr-2014 12:00:00 AM')
75
+ (300, 'B', 20160401),
64
76
 
65
- INTO tbl ("ID", "event", "date")
77
+ (300, 'D', 20160401),
66
78
 
67
- VALUES (200, 'A', '01-Sep-2014 12:00:00 AM')
68
-
69
- INTO tbl ("ID", "event", "date")
70
-
71
- VALUES (200, 'C', '01-Apr-2015 12:00:00 AM')
72
-
73
- INTO tbl ("ID", "event", "date")
74
-
75
- VALUES (300, 'A', '01-Apr-2016 12:00:00 AM')
76
-
77
- INTO tbl ("ID", "event", "date")
78
-
79
- VALUES (300, 'B', '01-Apr-2016 12:00:00 AM')
80
-
81
- INTO tbl ("ID", "event", "date")
82
-
83
- VALUES (300, 'D', '01-Apr-2016 12:00:00 AM')
84
-
85
- INTO tbl ("ID", "event", "date")
86
-
87
- VALUES (300, 'C', '01-May-2017 12:00:00 AM')
79
+ (300, 'C', 20170501)
88
-
89
- SELECT * FROM dual
90
80
 
91
81
  ;
92
-
93
-
94
82
 
95
83
  ```
96
84
 
@@ -100,52 +88,40 @@
100
88
 
101
89
 
102
90
 
103
-
104
-
105
91
  ```sql
106
92
 
107
- --After:整形後
93
+ --After
108
94
 
109
- CREATE TABLE tbl
95
+ CREATE TABLE Tbl
110
96
 
111
- ("ID" int, "event" varchar2(2), "date" timestamp)
97
+ (`ID` int, `event` varchar(2), `event_date` int)
98
+
99
+ ;
100
+
101
+
102
+
103
+ INSERT INTO Tbl
104
+
105
+ (`ID`, `event`, `event_date`)
106
+
107
+ VALUES
108
+
109
+ (100, 'AB', 20140401),
110
+
111
+ (100, 'C', 20140408),
112
+
113
+ (200, 'A', 20140901),
114
+
115
+ (200, 'C', 20150401),
116
+
117
+ (300, 'AB', 20160401),
118
+
119
+ (300, 'D', 20160401),
120
+
121
+ (300, 'C', 20170501)
112
122
 
113
123
  ;
114
124
 
115
125
 
116
126
 
117
- INSERT ALL
118
-
119
- INTO tbl ("ID", "event", "date")
120
-
121
- VALUES (100, 'AB', '01-Apr-2014 12:00:00 AM')
122
-
123
- INTO tbl ("ID", "event", "date")
124
-
125
- VALUES (100, 'C', '08-Apr-2014 12:00:00 AM')
126
-
127
- INTO tbl ("ID", "event", "date")
128
-
129
- VALUES (200, 'A', '01-Sep-2014 12:00:00 AM')
130
-
131
- INTO tbl ("ID", "event", "date")
132
-
133
- VALUES (200, 'C', '01-Apr-2015 12:00:00 AM')
134
-
135
- INTO tbl ("ID", "event", "date")
136
-
137
- VALUES (300, 'AB', '01-Apr-2016 12:00:00 AM')
138
-
139
- INTO tbl ("ID", "event", "date")
140
-
141
- VALUES (300, 'D', '01-Apr-2016 12:00:00 AM')
142
-
143
- INTO tbl ("ID", "event", "date")
144
-
145
- VALUES (300, 'C', '01-May-2017 12:00:00 AM')
146
-
147
- SELECT * FROM dual
148
-
149
- ;
150
-
151
127
  ```

1

初心者マークをつけました。

2021/01/10 04:43

投稿

mochiwo
mochiwo

スコア8

test CHANGED
File without changes
test CHANGED
@@ -43,6 +43,8 @@
43
43
  ("ID" int, "event" varchar2(1), "date" timestamp)
44
44
 
45
45
  ;
46
+
47
+
46
48
 
47
49
 
48
50