前提・実現したいこと
お疲れ様です。
まずタイトルがうまく要約できず、わかりにくいものとなってしまって申し訳ございません。
もしかするとそもそも不可能であるかもしれないのですが、可能である場合はご教授いただきたいです。
実現したいことは以下です。
■人情報が入っているテーブルからその人名と、その人が休暇を取得した場合の休暇行使日を、取得した休暇別に取得したいです。
・人情報が入っているテーブル=「PERSON」のカラムはそれぞれ、
person_id int primary key
person_code varchar2(10) not null
person_name varchar2(50) not null
で、入っているデータは仮に、
person_id | person_code | person_name |
---|---|---|
1 | 001 | A |
2 | 002 | B |
3 | 003 | C |
とします。
・休暇の取得情報が入っているテーブル=「HOLIDAY」のカラムはそれぞれ、
holiday_id int primary key
person_code varchar2(10) not null
holiday_code varchar2(4) not null
holiday_name varchar2(30) not null
used_date char(10 char)
で、入っているデータは仮に、
|holiday_id|person_code|holiday_code|holiday_name|used_date|
|:--:|:--:|:--:|:--:|
|1|001|1000|代休|2020/10/01|
|1|001|2000|有給|2020/10/02|
|1|001|1000|代休|2020/10/03|
|2|002|2000|有給|2020/10/04|
|2|002|1000|代休|2020/10/05|
|3|003|3000|怪我病欠|2020/10/06|
|3|003|3000|怪我病欠|2020/10/07|
|3|003|3000|怪我病欠|2020/10/08|
とします。
これら二つのテーブルを、取得したい休暇情報分自己結合したのち、以下のようなイメージでデータを取得したいと考えております。
person_name | 代休 | 有休 | 怪我病欠 |
---|---|---|---|
A | 2020/10/01 | null | null |
A | null | 2020/10/02 | null |
A | 2020/10/03 | null | null |
B | null | 2020/10/04 | null |
B | 2020/10/05 | null | null |
C | null | null | 2020/10/06 |
C | null | null | 2020/10/07 |
C | null | null | 2020/10/08 |
試したこと
以下のようにしてみたのですが当然すべてに合致するものしか取得できずでして、
どのようにしたら上記のような形でデータを取得できるかわかりません。
もし方法があるようでしたらご教授願えるとありがたいです。
SQL(Oracle)
SELECT p.person_name, h1.used_date 代休, h2.used_date 有給, h3.used_date 怪我病欠 FROM PERSON p JOIN HOLIDAY h1 ON p.person_code = h1.person_code JOIN HOLIDAY h2 ON p.person_code = h2.person_code JOIN HOLIDAY h1 ON p.person_code = h3.person_code WHERE h1.holiday_code = '1000' AND h2.holiday_code = '2000' AND h3.holiday_code = '3000'
文章が拙いものとなってしまい、もしかすると伝わりづらいかもしれませんが、何卒よろしくお願い申し上げます。
以上です。
回答1件
あなたの回答
tips
プレビュー