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

質問編集履歴

6

プラス追加

2021/01/10 05:13

投稿

mochiwo
mochiwo

スコア8

title CHANGED
File without changes
body CHANGED
@@ -1,10 +1,10 @@
1
1
  ご質問です。
2
2
  データベースはOracleで、バージョンは11g R2です。
3
3
 
4
- あるIDの人(`ID`列) がイベントAとイベントB(`event`列)を経験した場合、複数行に分かれて格納されているデータがございます。このイベントAとイベントBの2行が、同一日(`event_date`列)である場合に、2行をまとめてしまってevent列を「AB」という文字列に変換したいと考えております。
4
+ あるIDの人(`ID`列) がイベントAとイベントB(`event`列)を経験した場合、複数行に分かれて格納されているデータがございます。このイベントAとイベントBの2行が、同一日(`event_date`列)である場合に、2行をまとめてしまってevent列を「A+B」という文字列に変換したいと考えております。
5
5
 
6
6
  たとえば、以下のBeforeの1行目と2行目はどちらも`ID`=100, `event_date` = 20140401で同一ID、同一日付となっています。
7
- この2行の`event`をAfterの1行目のようにABにして、Viewを作成したいと考えております。
7
+ この2行の`event`をAfterの1行目のように「A+B」にして、Viewを作成したいと考えております。
8
8
  event_dateに同一日付の時刻違いのデータはございません。
9
9
 
10
10
  解決できるSQLクエリをご教示いただければ大変幸いです。

5

Afterクエリ削除

2021/01/10 05:13

投稿

mochiwo
mochiwo

スコア8

title CHANGED
File without changes
body CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- なお、上記サンプルデータを作成したクエリは以下でございます。
23
+ なお、Beforeのサンプルデータを作成したクエリは以下でございます。
24
24
 
25
25
 
26
26
  ```sql
@@ -50,31 +50,4 @@
50
50
  VALUES (300, 'C', 20170501)
51
51
  SELECT * FROM dual
52
52
  ;
53
- ```
54
-
55
-
56
-
57
- ```sql
58
- --After
59
- CREATE TABLE Tbl
60
- (ID int, EVENT varchar2(2), EVENT_DATE int)
61
- ;
62
-
63
- INSERT ALL
64
- INTO Tbl (ID, EVENT, EVENT_DATE)
65
- VALUES (100, 'AB', 20140401)
66
- INTO Tbl (ID, EVENT, EVENT_DATE)
67
- VALUES (100, 'C', 20140408)
68
- INTO Tbl (ID, EVENT, EVENT_DATE)
69
- VALUES (200, 'A', 20140901)
70
- INTO Tbl (ID, EVENT, EVENT_DATE)
71
- VALUES (200, 'C', 20150401)
72
- INTO Tbl (ID, EVENT, EVENT_DATE)
73
- VALUES (300, 'AB', 20160401)
74
- INTO Tbl (ID, EVENT, EVENT_DATE)
75
- VALUES (300, 'D', 20160401)
76
- INTO Tbl (ID, EVENT, EVENT_DATE)
77
- VALUES (300, 'C', 20170501)
78
- SELECT * FROM dual
79
- ;
80
53
  ```

4

修正3

2021/01/10 05:12

投稿

mochiwo
mochiwo

スコア8

title CHANGED
File without changes
body CHANGED
@@ -1,18 +1,21 @@
1
1
  ご質問です。
2
+ データベースはOracleで、バージョンは11g R2です。
3
+
2
4
  あるIDの人(`ID`列) がイベントAとイベントB(`event`列)を経験した場合、複数行に分かれて格納されているデータがございます。このイベントAとイベントBの2行が、同一日(`event_date`列)である場合に、2行をまとめてしまってevent列を「AB」という文字列に変換したいと考えております。
3
5
 
4
6
  たとえば、以下のBeforeの1行目と2行目はどちらも`ID`=100, `event_date` = 20140401で同一ID、同一日付となっています。
5
- この2行の`event`をAfterの1行目のようにABにしたいと考えてます。
7
+ この2行の`event`をAfterの1行目のようにABにして、Viewを作成したいと考えております。
8
+ event_dateに同一日付の時刻違いのデータはございません。
6
9
 
7
10
  解決できるSQLクエリをご教示いただければ大変幸いです。
8
11
  どうぞよろしくお願い申し上げます。
9
12
 
10
13
  Before:
11
- ![イメージ説明](4e81b4854773ceedf0d53c4db69b668a.png)
14
+ ![イメージ説明](28f32ca4c8b9cfb2735c61882ee488d8.png)
12
15
 
13
16
 
14
17
  After:
15
- ![イメージ説明](29de60a7a7421076e81235ca2d876161.png)
18
+ ![イメージ説明](c6183ff03d0b057b614ab0679d228d09.png)
16
19
 
17
20
 
18
21
 
@@ -23,27 +26,27 @@
23
26
  ```sql
24
27
  --Before
25
28
  CREATE TABLE Tbl
26
- ("ID" int, "event" varchar2(1), "event_date" int)
29
+ (ID int, event varchar2(1), event_date int)
27
30
  ;
28
31
 
29
32
  INSERT ALL
30
- INTO Tbl ("ID", "event", "event_date")
33
+ INTO Tbl (ID, event, event_date)
31
34
  VALUES (100, 'A', 20140401)
32
- INTO Tbl ("ID", "event", "event_date")
35
+ INTO Tbl (ID, event, event_date)
33
36
  VALUES (100, 'B', 20140401)
34
- INTO Tbl ("ID", "event", "event_date")
37
+ INTO Tbl (ID, event, event_date)
35
38
  VALUES (100, 'C', 20140408)
36
- INTO Tbl ("ID", "event", "event_date")
39
+ INTO Tbl (ID, event, event_date)
37
40
  VALUES (200, 'A', 20140901)
38
- INTO Tbl ("ID", "event", "event_date")
41
+ INTO Tbl (ID, event, event_date)
39
42
  VALUES (200, 'C', 20150401)
40
- INTO Tbl ("ID", "event", "event_date")
43
+ INTO Tbl (ID, event, event_date)
41
44
  VALUES (300, 'A', 20160401)
42
- INTO Tbl ("ID", "event", "event_date")
45
+ INTO Tbl (ID, event, event_date)
43
46
  VALUES (300, 'B', 20160401)
44
- INTO Tbl ("ID", "event", "event_date")
47
+ INTO Tbl (ID, event, event_date)
45
48
  VALUES (300, 'D', 20160401)
46
- INTO Tbl ("ID", "event", "event_date")
49
+ INTO Tbl (ID, event, event_date)
47
50
  VALUES (300, 'C', 20170501)
48
51
  SELECT * FROM dual
49
52
  ;
@@ -54,25 +57,24 @@
54
57
  ```sql
55
58
  --After
56
59
  CREATE TABLE Tbl
57
- ("ID" int, "event" varchar2(2), "event_date" int)
60
+ (ID int, EVENT varchar2(2), EVENT_DATE int)
58
61
  ;
59
62
 
60
63
  INSERT ALL
61
- INTO Tbl ("ID", "event", "event_date")
64
+ INTO Tbl (ID, EVENT, EVENT_DATE)
62
65
  VALUES (100, 'AB', 20140401)
63
- INTO Tbl ("ID", "event", "event_date")
66
+ INTO Tbl (ID, EVENT, EVENT_DATE)
64
67
  VALUES (100, 'C', 20140408)
65
- INTO Tbl ("ID", "event", "event_date")
68
+ INTO Tbl (ID, EVENT, EVENT_DATE)
66
69
  VALUES (200, 'A', 20140901)
67
- INTO Tbl ("ID", "event", "event_date")
70
+ INTO Tbl (ID, EVENT, EVENT_DATE)
68
71
  VALUES (200, 'C', 20150401)
69
- INTO Tbl ("ID", "event", "event_date")
72
+ INTO Tbl (ID, EVENT, EVENT_DATE)
70
73
  VALUES (300, 'AB', 20160401)
71
- INTO Tbl ("ID", "event", "event_date")
74
+ INTO Tbl (ID, EVENT, EVENT_DATE)
72
75
  VALUES (300, 'D', 20160401)
73
- INTO Tbl ("ID", "event", "event_date")
76
+ INTO Tbl (ID, EVENT, EVENT_DATE)
74
77
  VALUES (300, 'C', 20170501)
75
78
  SELECT * FROM dual
76
79
  ;
77
-
78
80
  ```

3

修正2

2021/01/10 05:10

投稿

mochiwo
mochiwo

スコア8

title CHANGED
File without changes
body CHANGED
@@ -23,21 +23,29 @@
23
23
  ```sql
24
24
  --Before
25
25
  CREATE TABLE Tbl
26
- (`ID` int, `event` varchar(1), `event_date` int)
26
+ ("ID" int, "event" varchar2(1), "event_date" int)
27
27
  ;
28
-
28
+
29
- INSERT INTO Tbl
29
+ INSERT ALL
30
- (`ID`, `event`, `event_date`)
30
+ INTO Tbl ("ID", "event", "event_date")
31
- VALUES
32
- (100, 'A', 20140401),
31
+ VALUES (100, 'A', 20140401)
32
+ INTO Tbl ("ID", "event", "event_date")
33
- (100, 'B', 20140401),
33
+ VALUES (100, 'B', 20140401)
34
+ INTO Tbl ("ID", "event", "event_date")
34
- (100, 'C', 20140408),
35
+ VALUES (100, 'C', 20140408)
36
+ INTO Tbl ("ID", "event", "event_date")
35
- (200, 'A', 20140901),
37
+ VALUES (200, 'A', 20140901)
38
+ INTO Tbl ("ID", "event", "event_date")
36
- (200, 'C', 20150401),
39
+ VALUES (200, 'C', 20150401)
40
+ INTO Tbl ("ID", "event", "event_date")
37
- (300, 'A', 20160401),
41
+ VALUES (300, 'A', 20160401)
42
+ INTO Tbl ("ID", "event", "event_date")
38
- (300, 'B', 20160401),
43
+ VALUES (300, 'B', 20160401)
44
+ INTO Tbl ("ID", "event", "event_date")
39
- (300, 'D', 20160401),
45
+ VALUES (300, 'D', 20160401)
46
+ INTO Tbl ("ID", "event", "event_date")
40
- (300, 'C', 20170501)
47
+ VALUES (300, 'C', 20170501)
48
+ SELECT * FROM dual
41
49
  ;
42
50
  ```
43
51
 
@@ -46,19 +54,25 @@
46
54
  ```sql
47
55
  --After
48
56
  CREATE TABLE Tbl
49
- (`ID` int, `event` varchar(2), `event_date` int)
57
+ ("ID" int, "event" varchar2(2), "event_date" int)
50
58
  ;
51
-
59
+
52
- INSERT INTO Tbl
60
+ INSERT ALL
53
- (`ID`, `event`, `event_date`)
61
+ INTO Tbl ("ID", "event", "event_date")
54
- VALUES
55
- (100, 'AB', 20140401),
62
+ VALUES (100, 'AB', 20140401)
63
+ INTO Tbl ("ID", "event", "event_date")
56
- (100, 'C', 20140408),
64
+ VALUES (100, 'C', 20140408)
65
+ INTO Tbl ("ID", "event", "event_date")
57
- (200, 'A', 20140901),
66
+ VALUES (200, 'A', 20140901)
67
+ INTO Tbl ("ID", "event", "event_date")
58
- (200, 'C', 20150401),
68
+ VALUES (200, 'C', 20150401)
69
+ INTO Tbl ("ID", "event", "event_date")
59
- (300, 'AB', 20160401),
70
+ VALUES (300, 'AB', 20160401)
71
+ INTO Tbl ("ID", "event", "event_date")
60
- (300, 'D', 20160401),
72
+ VALUES (300, 'D', 20160401)
73
+ INTO Tbl ("ID", "event", "event_date")
61
- (300, 'C', 20170501)
74
+ VALUES (300, 'C', 20170501)
75
+ SELECT * FROM dual
62
76
  ;
63
77
 
64
78
  ```

2

全体的な修正

2021/01/10 04:46

投稿

mochiwo
mochiwo

スコア8

title CHANGED
@@ -1,1 +1,1 @@
1
- 同一ID、同一日の異なるイベントをまとめたい
1
+ 同一ID、同一日複数行1行にまとめたうえで、他の列のセル値を結合した
body CHANGED
@@ -1,76 +1,64 @@
1
1
  ご質問です。
2
- 同じID、同じ日付にイベントAとイベントBを両方経験している場合に、「A+B」という文字列に変換して、2行を1行にまとめたいと考えております。
2
+ あるIDの人(`ID`列) がイベントAとイベントB(`event`列)を経験した場合、複数行に分かれ格納されているデータがございます。このイベントAとイベントBの2行が、同一日(`event_date`列)である場合に、2行をまとめてしまってevent列をAB」という文字列に変換したいと考えております。
3
3
 
4
+ たとえば、以下のBeforeの1行目と2行目はどちらも`ID`=100, `event_date` = 20140401で同一ID、同一日付となっています。
4
- 具体的には、以下BeforeからAfterへデータ整形をしたいと考えております。
5
+ 2行`event`Afterの1行目のようにABにしたいと考えてます。
6
+
5
7
  解決できるSQLクエリをご教示いただければ大変幸いです。
6
8
  どうぞよろしくお願い申し上げます。
7
9
 
8
- **Before**
10
+ Before:
9
- ![Before: 整形前](b5d7ee1db19940b6371b63b7c163d9c8.png)
11
+ ![イメージ説明](4e81b4854773ceedf0d53c4db69b668a.png)
10
12
 
11
13
 
12
- **After**
14
+ After:
13
- ![After: 整形後](b60b781b9bb8c8c1e4bf409193dbd76f.png)
15
+ ![イメージ説明](29de60a7a7421076e81235ca2d876161.png)
14
16
 
15
17
 
16
18
 
19
+
17
20
  なお、上記サンプルデータを作成したクエリは以下でございます。
18
21
 
22
+
19
23
  ```sql
20
- --Before:整形前
24
+ --Before
21
- CREATE TABLE tbl
25
+ CREATE TABLE Tbl
22
- ("ID" int, "event" varchar2(1), "date" timestamp)
26
+ (`ID` int, `event` varchar(1), `event_date` int)
23
27
  ;
24
-
25
-
28
+
26
- INSERT ALL
29
+ INSERT INTO Tbl
27
- INTO tbl ("ID", "event", "date")
30
+ (`ID`, `event`, `event_date`)
31
+ VALUES
28
- VALUES (100, 'A', '01-Apr-2014 12:00:00 AM')
32
+ (100, 'A', 20140401),
29
- INTO tbl ("ID", "event", "date")
30
- VALUES (100, 'B', '01-Apr-2014 12:00:00 AM')
33
+ (100, 'B', 20140401),
31
- INTO tbl ("ID", "event", "date")
32
- VALUES (100, 'C', '08-Apr-2014 12:00:00 AM')
34
+ (100, 'C', 20140408),
33
- INTO tbl ("ID", "event", "date")
34
- VALUES (200, 'A', '01-Sep-2014 12:00:00 AM')
35
+ (200, 'A', 20140901),
35
- INTO tbl ("ID", "event", "date")
36
- VALUES (200, 'C', '01-Apr-2015 12:00:00 AM')
36
+ (200, 'C', 20150401),
37
- INTO tbl ("ID", "event", "date")
38
- VALUES (300, 'A', '01-Apr-2016 12:00:00 AM')
37
+ (300, 'A', 20160401),
39
- INTO tbl ("ID", "event", "date")
40
- VALUES (300, 'B', '01-Apr-2016 12:00:00 AM')
38
+ (300, 'B', 20160401),
41
- INTO tbl ("ID", "event", "date")
42
- VALUES (300, 'D', '01-Apr-2016 12:00:00 AM')
39
+ (300, 'D', 20160401),
43
- INTO tbl ("ID", "event", "date")
44
- VALUES (300, 'C', '01-May-2017 12:00:00 AM')
40
+ (300, 'C', 20170501)
45
- SELECT * FROM dual
46
41
  ;
47
-
48
42
  ```
49
43
 
50
44
 
51
45
 
52
-
53
46
  ```sql
54
- --After:整形後
47
+ --After
55
- CREATE TABLE tbl
48
+ CREATE TABLE Tbl
56
- ("ID" int, "event" varchar2(2), "date" timestamp)
49
+ (`ID` int, `event` varchar(2), `event_date` int)
57
50
  ;
51
+
52
+ INSERT INTO Tbl
53
+ (`ID`, `event`, `event_date`)
54
+ VALUES
55
+ (100, 'AB', 20140401),
56
+ (100, 'C', 20140408),
57
+ (200, 'A', 20140901),
58
+ (200, 'C', 20150401),
59
+ (300, 'AB', 20160401),
60
+ (300, 'D', 20160401),
61
+ (300, 'C', 20170501)
62
+ ;
58
63
 
59
- INSERT ALL
60
- INTO tbl ("ID", "event", "date")
61
- VALUES (100, 'AB', '01-Apr-2014 12:00:00 AM')
62
- INTO tbl ("ID", "event", "date")
63
- VALUES (100, 'C', '08-Apr-2014 12:00:00 AM')
64
- INTO tbl ("ID", "event", "date")
65
- VALUES (200, 'A', '01-Sep-2014 12:00:00 AM')
66
- INTO tbl ("ID", "event", "date")
67
- VALUES (200, 'C', '01-Apr-2015 12:00:00 AM')
68
- INTO tbl ("ID", "event", "date")
69
- VALUES (300, 'AB', '01-Apr-2016 12:00:00 AM')
70
- INTO tbl ("ID", "event", "date")
71
- VALUES (300, 'D', '01-Apr-2016 12:00:00 AM')
72
- INTO tbl ("ID", "event", "date")
73
- VALUES (300, 'C', '01-May-2017 12:00:00 AM')
74
- SELECT * FROM dual
75
- ;
76
64
  ```

1

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

2021/01/10 04:43

投稿

mochiwo
mochiwo

スコア8

title CHANGED
File without changes
body CHANGED
@@ -22,6 +22,7 @@
22
22
  ("ID" int, "event" varchar2(1), "date" timestamp)
23
23
  ;
24
24
 
25
+
25
26
  INSERT ALL
26
27
  INTO tbl ("ID", "event", "date")
27
28
  VALUES (100, 'A', '01-Apr-2014 12:00:00 AM')