質問編集履歴
3
文言の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,9 +3,18 @@
|
|
3
3
|
|
4
4
|
■人情報が入っているテーブルからその人名と、その人が休暇を取得した場合に、
|
5
5
|
休暇情報が入ったテーブルから休暇行使日を取得した休暇別に取得したいです。
|
6
|
+
加えて、上詰めで表示で来てたら尚うれしいです。
|
7
|
+
最悪上詰めで無くてもよいです。
|
6
8
|
|
9
|
+
【発生している問題点】
|
10
|
+
・本来は入っていない重複したデータが取得されてしまいます。
|
11
|
+
実際に取得されたイメージを下に掲載いたしました。
|
7
12
|
|
13
|
+
|
14
|
+
【テーブルの構成】
|
15
|
+
「person」
|
16
|
+
|
8
|
-
・人情報が入っているテーブル=「
|
17
|
+
・人情報が入っているテーブル=「person」のカラムはそれぞれ、
|
9
18
|
person_id int primary key
|
10
19
|
person_code varchar2(10) not null
|
11
20
|
person_name varchar2(50) not null
|
@@ -20,7 +29,9 @@
|
|
20
29
|
|
21
30
|
とします。
|
22
31
|
|
32
|
+
「holiday」
|
33
|
+
|
23
|
-
・休暇の取得情報が入っているテーブル=「
|
34
|
+
・休暇の取得情報が入っているテーブル=「holiday」のカラムはそれぞれ、
|
24
35
|
holiday_id int primary key
|
25
36
|
person_code varchar2(10) not null
|
26
37
|
holiday_code varchar2(4) not null
|
@@ -66,7 +77,7 @@
|
|
66
77
|
|C|null|null|2020/10/04|
|
67
78
|
|C|null|null|2020/10/05|
|
68
79
|
|
69
|
-
太字の個所のように、
|
80
|
+
太字の個所のように、本来はない重複データが取得されてしまいます。
|
70
81
|
原因もさっぱりわからず、これを実現するためにどのようにネットでサーチしたらよいかもさっぱりでして、
|
71
82
|
また助けていただけるとありがたいです。
|
72
83
|
|
@@ -128,8 +139,6 @@
|
|
128
139
|
のように実際にないデータ、または休暇を取っている人がおらずにデータがない場合等、データを取得できない場合に結合できない為か、
|
129
140
|
その列だけすべてnullになればよいものが、データがぐちゃぐちゃになって集計されてしまいます。
|
130
141
|
|
131
|
-
前回同様文章が拙いものとなってしまい、伝わりづらいかもしれませんが、お分かりになられる方何卒よろしくお願い申し上げます。
|
132
|
-
|
133
142
|
データが問題が起きている現場のものと一緒でない為、もしかするとここに書いた情報だけでは特定できないということもあるかもしれませんが、可能性だけでもご教授いただけたら大変ありがたいです。
|
134
143
|
|
135
144
|
尚前回ご指摘いただいた修正依頼でデータをインサートする部分も記述せよとのことだったのですが、
|
2
とりいそぎデータの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,22 +1,10 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
お疲れ様です。
|
3
|
-
前回こちらにて質問させていただいたものです。
|
4
|
-
https://teratail.com/questions/301870
|
5
3
|
|
6
|
-
|
4
|
+
■人情報が入っているテーブルからその人名と、その人が休暇を取得した場合に、
|
7
|
-
|
5
|
+
休暇情報が入ったテーブルから休暇行使日を取得した休暇別に取得したいです。
|
8
6
|
|
9
|
-
どういう現象が起こるかというと、実際のテーブルにないデータが抽出されてきます。
|
10
7
|
|
11
|
-
まず前回の内容と重複する部分もあるのですが、初めてこちらから見ていただいている方もいらっしゃると思うので
|
12
|
-
ある程度再掲させてください。
|
13
|
-
|
14
|
-
長文になりますことを先にお詫びいたします。
|
15
|
-
|
16
|
-
【実現したいこと】
|
17
|
-
|
18
|
-
■人情報が入っているテーブルからその人名と、その人が休暇を取得した場合に、
|
19
|
-
休暇情報が入ったテーブルから休暇行使日を取得した休暇別に取得したいです。
|
20
8
|
・人情報が入っているテーブル=「PERSON」のカラムはそれぞれ、
|
21
9
|
person_id int primary key
|
22
10
|
person_code varchar2(10) not null
|
@@ -31,6 +19,7 @@
|
|
31
19
|
|
32
20
|
|
33
21
|
とします。
|
22
|
+
|
34
23
|
・休暇の取得情報が入っているテーブル=「HOLIDAY」のカラムはそれぞれ、
|
35
24
|
holiday_id int primary key
|
36
25
|
person_code varchar2(10) not null
|
@@ -38,45 +27,30 @@
|
|
38
27
|
holiday_name varchar2(30) not null
|
39
28
|
used_date char(10 char)
|
40
29
|
で、
|
41
|
-
前回は入っているデータを仮に、
|
42
|
-
|holiday_id|person_code|holiday_code|holiday_name|used_date|
|
43
|
-
|:--:|:--:|:--:|:--:|
|
44
|
-
|1|001|1000|代休|2020/10/01|
|
45
|
-
|1|001|2000|有給|2020/10/02|
|
46
|
-
|1|001|1000|代休|2020/10/03|
|
47
|
-
|2|002|2000|有給|2020/10/04|
|
48
|
-
|2|002|1000|代休|2020/10/05|
|
49
|
-
|3|003|3000|怪我病欠|2020/10/06|
|
50
|
-
|3|003|3000|怪我病欠|2020/10/07|
|
51
|
-
|3|003|3000|怪我病欠|2020/10/08|
|
52
30
|
|
53
|
-
|
31
|
+
今回問題が発生したデータが以下、
|
54
32
|
|holiday_id|person_code|holiday_code|holiday_name|used_date|
|
55
33
|
|:--:|:--:|:--:|:--:|
|
56
34
|
|1|001|1000|代休|2020/10/01|
|
57
|
-
|
|
35
|
+
|1|001|1000|代休|2020/10/02|
|
58
|
-
|1|001|2000|有給|2020/10/
|
36
|
+
|1|001|2000|有給|2020/10/03|
|
59
|
-
|1|001|1000|
|
37
|
+
|1|001|1000|怪我病欠|2020/10/04|
|
60
|
-
|2|002|2000|有給|2020/10/
|
38
|
+
|2|002|2000|有給|2020/10/01|
|
39
|
+
|2|002|1000|代休|2020/10/03|
|
61
40
|
|2|002|1000|代休|2020/10/05|
|
62
|
-
|3|003|3000|怪我病欠|2020/10/
|
41
|
+
|3|003|3000|怪我病欠|2020/10/03|
|
63
|
-
|3|003|3000|怪我病欠|2020/10/
|
42
|
+
|3|003|3000|怪我病欠|2020/10/04|
|
64
|
-
|3|003|3000|怪我病欠|2020/10/
|
43
|
+
|3|003|3000|怪我病欠|2020/10/05|
|
65
44
|
|
66
|
-
上から二番目の行が追加になった場合に先ほどの重複問題が発生いたしました。
|
67
|
-
※ただし実際に起きたデータとは中身が異なることを先にお伝えいたします。
|
68
|
-
データ数があまりに多いことと、現場のデータなのでこちらに書くわけにもいかずでして、、、
|
69
|
-
|
45
|
+
とします。
|
70
46
|
|
71
47
|
これら二つのテーブルを、取得したい休暇情報分自己結合したのち、以下のようなイメージでデータを取得したいと考えております。
|
72
48
|
|person_name|代休|有休|怪我病欠|
|
73
49
|
|:--:|:--:|:--:|:--:|
|
74
|
-
|A|2020/10/01|2020/10/
|
50
|
+
|A|2020/10/01|2020/10/03|2020/10/04|
|
75
51
|
|A|2020/10/02|null|null|
|
76
|
-
|A|null|null|null|
|
77
|
-
|
|
52
|
+
|B|2020/10/03|2020/10/01|null|
|
78
|
-
|B|null|2020/10/04|null|
|
79
|
-
|B|2020/10/
|
53
|
+
|B|2020/10/04|null|null|
|
80
54
|
|C|null|null|2020/10/06|
|
81
55
|
|C|null|null|2020/10/07|
|
82
56
|
|C|null|null|2020/10/08|
|
@@ -84,15 +58,13 @@
|
|
84
58
|
しかし実際に出てきたデータがこちら
|
85
59
|
|person_name|代休|有休|怪我病欠|
|
86
60
|
|:--:|:--:|:--:|:--:|
|
61
|
+
|A|2020/10/01|2020/10/03|2020/10/04|
|
62
|
+
|A|2020/10/02|**2020/10/03**|**2020/10/04**|
|
87
|
-
|
|
63
|
+
|B|2020/10/03|2020/10/01|null|
|
88
|
-
|
|
64
|
+
|B|2020/10/04|**2020/10/01**|null|
|
89
|
-
|A|null|null|null|
|
90
|
-
|A|2020/10/03|null|null|
|
91
|
-
|B|null|2020/10/04|null|
|
92
|
-
|B|2020/10/05|null|null|
|
93
|
-
|C|null|null|2020/10/
|
65
|
+
|C|null|null|2020/10/03|
|
94
|
-
|C|null|null|2020/10/
|
66
|
+
|C|null|null|2020/10/04|
|
95
|
-
|C|null|null|2020/10/
|
67
|
+
|C|null|null|2020/10/05|
|
96
68
|
|
97
69
|
太字の個所のように、実際結合する前のテーブルでは A の 有休 は1日しかなかったはずなのに、二つに増えてしまいました。
|
98
70
|
原因もさっぱりわからず、これを実現するためにどのようにネットでサーチしたらよいかもさっぱりでして、
|
1
コードの部分がトリプルバッククォートで挟まれていなかったので修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -100,6 +100,7 @@
|
|
100
100
|
|
101
101
|
### 試したこと
|
102
102
|
前回の質問の時に教えていただいた、下のクエリで集計いたしました。
|
103
|
+
```
|
103
104
|
SELECT p.person_name
|
104
105
|
, h1.used_date 代休, h2.used_date 有給, h3.used_date 怪我病欠
|
105
106
|
FROM PERSON p
|
@@ -112,7 +113,7 @@
|
|
112
113
|
left JOIN HOLIDAY h3
|
113
114
|
ON h3.holiday_code='3000'
|
114
115
|
and p.person_code = h3.person_code
|
115
|
-
|
116
|
+
```
|
116
117
|
その時に、クロス集計することになるだろうとはおっしゃっていただいたのですが、
|
117
118
|
調べた際に出てきたクロス集計では
|
118
119
|
「SELECT p.person_name
|