質問編集履歴

3

文言の修正

2020/11/04 14:05

投稿

maru-omochi
maru-omochi

スコア11

test CHANGED
File without changes
test CHANGED
@@ -8,11 +8,29 @@
8
8
 
9
9
  休暇情報が入ったテーブルから休暇行使日を取得した休暇別に取得したいです。
10
10
 
11
-
11
+ 加えて、上詰めで表示で来てたら尚うれしいです。
12
+
12
-
13
+ 最悪上詰めで無くてもよいです。
14
+
15
+
16
+
13
-
17
+ 【発生している問題点】
18
+
14
-
19
+ ・本来は入っていない重複したデータが取得されてしまいます。
20
+
21
+ 実際に取得されたイメージを下に掲載いたしました。
22
+
23
+
24
+
25
+
26
+
27
+ 【テーブルの構成】
28
+
29
+ 「person」
30
+
31
+
32
+
15
- ・人情報が入っているテーブル=「PERSON」のカラムはそれぞれ、
33
+ ・人情報が入っているテーブル=「person」のカラムはそれぞれ、
16
34
 
17
35
  person_id int primary key
18
36
 
@@ -42,7 +60,11 @@
42
60
 
43
61
 
44
62
 
63
+ 「holiday」
64
+
65
+
66
+
45
- ・休暇の取得情報が入っているテーブル=「HOLIDAY」のカラムはそれぞれ、
67
+ ・休暇の取得情報が入っているテーブル=「holiday」のカラムはそれぞれ、
46
68
 
47
69
  holiday_id int primary key
48
70
 
@@ -134,7 +156,7 @@
134
156
 
135
157
 
136
158
 
137
- 太字の個所のように、実際結合する前のテーブルで A の 有休 は1日しかかったはずなのに、二つに増えてしまいました
159
+ 太字の個所のように、本来はない重複データが取得されてしまいま
138
160
 
139
161
  原因もさっぱりわからず、これを実現するためにどのようにネットでサーチしたらよいかもさっぱりでして、
140
162
 
@@ -258,10 +280,6 @@
258
280
 
259
281
 
260
282
 
261
- 前回同様文章が拙いものとなってしまい、伝わりづらいかもしれませんが、お分かりになられる方何卒よろしくお願い申し上げます。
262
-
263
-
264
-
265
283
  データが問題が起きている現場のものと一緒でない為、もしかするとここに書いた情報だけでは特定できないということもあるかもしれませんが、可能性だけでもご教授いただけたら大変ありがたいです。
266
284
 
267
285
 

2

とりいそぎデータの修正

2020/11/04 14:05

投稿

maru-omochi
maru-omochi

スコア11

test CHANGED
File without changes
test CHANGED
@@ -2,40 +2,16 @@
2
2
 
3
3
   お疲れ様です。
4
4
 
5
- 前回こちらにて質問させていただいたものです。
5
+
6
-
7
- https://teratail.com/questions/301870
8
-
9
-
10
-
11
- 前回回答していただいて一旦解決したのですが、テーブルに入っているデータによってうまく集計できない(希望通りにならない)
12
-
13
- 場面が出てくることに気が付きました。
14
-
15
-
16
-
17
- どういう現象が起こるかというと、実際のテーブルにないデータが抽出されてきます。
18
-
19
-
20
-
21
- まず前回の内容と重複する部分もあるのですが、初めてこちらから見ていただいている方もいらっしゃると思うので
22
-
23
- ある程度再掲させてください。
24
-
25
-
26
-
27
- 長文になりますことを先にお詫びいたします。
28
-
29
-
30
-
31
- 【実現したいこと】
32
-
33
-  
34
6
 
35
7
  ■人情報が入っているテーブルからその人名と、その人が休暇を取得した場合に、
36
8
 
37
9
  休暇情報が入ったテーブルから休暇行使日を取得した休暇別に取得したいです。
38
10
 
11
+
12
+
13
+
14
+
39
15
  ・人情報が入っているテーブル=「PERSON」のカラムはそれぞれ、
40
16
 
41
17
  person_id int primary key
@@ -64,6 +40,8 @@
64
40
 
65
41
  とします。
66
42
 
43
+
44
+
67
45
  ・休暇の取得情報が入っているテーブル=「HOLIDAY」のカラムはそれぞれ、
68
46
 
69
47
  holiday_id int primary key
@@ -78,7 +56,9 @@
78
56
 
79
57
  で、
80
58
 
59
+
60
+
81
- は入っているデータを仮に
61
+ 問題が発生したデータが以下
82
62
 
83
63
  |holiday_id|person_code|holiday_code|holiday_name|used_date|
84
64
 
@@ -86,107 +66,71 @@
86
66
 
87
67
  |1|001|1000|代休|2020/10/01|
88
68
 
69
+ |1|001|1000|代休|2020/10/02|
70
+
89
- |1|001|2000|有給|2020/10/02|
71
+ |1|001|2000|有給|2020/10/03|
90
-
72
+
91
- |1|001|1000|代休|2020/10/03|
73
+ |1|001|1000|怪我病欠|2020/10/04|
92
-
74
+
93
- |2|002|2000|有給|2020/10/04|
75
+ |2|002|2000|有給|2020/10/01|
76
+
77
+ |2|002|1000|代休|2020/10/03|
94
78
 
95
79
  |2|002|1000|代休|2020/10/05|
96
80
 
97
- |3|003|3000|怪我病欠|2020/10/06|
81
+ |3|003|3000|怪我病欠|2020/10/03|
98
-
82
+
99
- |3|003|3000|怪我病欠|2020/10/07|
83
+ |3|003|3000|怪我病欠|2020/10/04|
100
-
84
+
101
- |3|003|3000|怪我病欠|2020/10/08|
85
+ |3|003|3000|怪我病欠|2020/10/05|
102
-
103
-
104
-
86
+
87
+
88
+
105
- させていただいたのでが、今回問題が発生したデータが以下、
89
+ しま
106
-
90
+
91
+
92
+
107
- |holiday_id|person_code|holiday_code|holiday_name|used_date|
93
+ これら二つのテーブルを、取得したい休暇情報分自己結合したのち、以下のようなイメージでデータを取得したいと考えております。
94
+
95
+ |person_name|代休|有休|怪我病欠|
108
96
 
109
97
  |:--:|:--:|:--:|:--:|
110
98
 
99
+ |A|2020/10/01|2020/10/03|2020/10/04|
100
+
101
+ |A|2020/10/02|null|null|
102
+
111
- |1|001|1000|代休|2020/10/01|
103
+ |B|2020/10/03|2020/10/01|null|
112
-
113
- |**1**|**001**|**1000**|**代休**|**2020/10/02**|
104
+
114
-
115
- |1|001|2000|有給|2020/10/02|
116
-
117
- |1|001|1000|代休|2020/10/03|
118
-
119
- |2|002|2000|有給|2020/10/04|
105
+ |B|2020/10/04|null|null|
120
-
121
- |2|002|1000|代休|2020/10/05|
106
+
122
-
123
- |3|003|3000|怪我病欠|2020/10/06|
107
+ |C|null|null|2020/10/06|
124
-
108
+
125
- |3|003|3000|怪我病欠|2020/10/07|
109
+ |C|null|null|2020/10/07|
126
-
110
+
127
- |3|003|3000|怪我病欠|2020/10/08|
111
+ |C|null|null|2020/10/08|
128
-
129
-
130
-
131
- 上から二番目の行が追加になった場合に先ほどの重複問題が発生いたしました。
112
+
132
-
113
+
114
+
133
- ※ただし実際にきたデータとは中身異なるとを先にお伝えいたします。
115
+ かし実際に出てきたデータがこちら
134
-
135
- データ数があまりに多いことと、現場のデータなのでこちらに書くわけにもいかずでして、、、
136
-
137
- 一旦前提条件の話を続けます。
138
-
139
-
140
-
141
- これら二つのテーブルを、取得したい休暇情報分自己結合したのち、以下のようなイメージでデータを取得したいと考えております。
142
116
 
143
117
  |person_name|代休|有休|怪我病欠|
144
118
 
145
119
  |:--:|:--:|:--:|:--:|
146
120
 
121
+ |A|2020/10/01|2020/10/03|2020/10/04|
122
+
123
+ |A|2020/10/02|**2020/10/03**|**2020/10/04**|
124
+
147
- |A|2020/10/01|2020/10/02|null|
125
+ |B|2020/10/03|2020/10/01|null|
148
-
149
- |A|2020/10/02|null|null|
126
+
150
-
151
- |A|null|null|null|
152
-
153
- |A|2020/10/03|null|null|
154
-
155
- |B|null|2020/10/04|null|
127
+ |B|2020/10/04|**2020/10/01**|null|
156
-
157
- |B|2020/10/05|null|null|
128
+
158
-
159
- |C|null|null|2020/10/06|
129
+ |C|null|null|2020/10/03|
160
-
130
+
161
- |C|null|null|2020/10/07|
131
+ |C|null|null|2020/10/04|
162
-
132
+
163
- |C|null|null|2020/10/08|
133
+ |C|null|null|2020/10/05|
164
-
165
-
166
-
167
- しかし実際に出てきたデータがこちら
168
-
169
- |person_name|代休|有休|怪我病欠|
170
-
171
- |:--:|:--:|:--:|:--:|
172
-
173
- |A|2020/10/01|2020/10/02|null|
174
-
175
- |A|2020/10/02|**2020/10/02**|null|
176
-
177
- |A|null|null|null|
178
-
179
- |A|2020/10/03|null|null|
180
-
181
- |B|null|2020/10/04|null|
182
-
183
- |B|2020/10/05|null|null|
184
-
185
- |C|null|null|2020/10/06|
186
-
187
- |C|null|null|2020/10/07|
188
-
189
- |C|null|null|2020/10/08|
190
134
 
191
135
 
192
136
 

1

コードの部分がトリプルバッククォートで挟まれていなかったので修正しました。

2020/11/04 13:57

投稿

maru-omochi
maru-omochi

スコア11

test CHANGED
File without changes
test CHANGED
@@ -202,6 +202,8 @@
202
202
 
203
203
  前回の質問の時に教えていただいた、下のクエリで集計いたしました。
204
204
 
205
+ ```
206
+
205
207
  SELECT p.person_name
206
208
 
207
209
  , h1.used_date 代休, h2.used_date 有給, h3.used_date 怪我病欠
@@ -226,7 +228,7 @@
226
228
 
227
229
  and p.person_code = h3.person_code
228
230
 
229
-
231
+ ```
230
232
 
231
233
  その時に、クロス集計することになるだろうとはおっしゃっていただいたのですが、
232
234