안녕하세요.
예약현황 판을 만드는데 쿼리로 어느정도 형태를 쿼리로 가져와서 표현하고 싶은데 어떻게 해야할지 도무지 감이 안와서 이렇게 도움 요청드립니다.
<강사>
강사명 |
이순신 |
김유신 |
계백 |
장보고 |
<강습시간>
강의시간 |
09시 |
10시 |
11시 |
12시 |
<강습레벨>
강습레벨 |
초급 |
중급 |
상급 |
<예약현황>
강사명 | 강의시간 | 강습레벨 |
이순신 | 09시 | 초급 |
이순신 | 14시 | 중급 |
김유신 | 10시 | 초급 |
김유신 | 12시 | 중급 |
김유신 | 14시 | 고급 |
계백 | 11시 | 중급 |
계백 | 14시 | 초급 |
계백 | 16시 | 중급 |
장보고 | 11시 | 고급 |
위와같이 테이블 데이터가 들어가 있다고 가정하고 쿼리로 아래와 같은 형태 또는 비슷한 형태로 데이터셋을 가져오고 싶습니다. (현황표 모양)
09시 | 10시 | 11시 | 12시 | 13시 | 14시 | 15시 | 16시 | 17시 | |
이순신 | 초급 | null | null | null | null | 중급 | null | null | null |
김유신 | null | 초급 | null | 중급 | null | 고급 | null | null | null |
계백 | null | null | 중급 | null | null | 초급 | null | 중급 | null |
장보고 | null | null | 고급 | null | null | null | null | null | null |
강습시간과 강사는 유동적인 데이터로 레코드가 늘어날수도 줄어들수도 있습니다. 강습레벨은 고정입니다.
이런 상태에서 원하는 표형태로 쿼리를 해올수 있을까요?
불가능하다면 보통 어떤 식으로 처리를 할수 있는지 조언 부탁드립니다.
감사합니다.
옆으로 나열하는 부분은 고정만 가능합니다.
가변으로 하려면 동적쿼리를 이용하셔야 합니다.
WITH t AS ( SELECT '이순신' nm, '09' tm, '초급' lv FROM dual UNION ALL SELECT '이순신', '14', '중급' FROM dual UNION ALL SELECT '김유신', '10', '초급' FROM dual UNION ALL SELECT '김유신', '12', '중급' FROM dual UNION ALL SELECT '김유신', '14', '고급' FROM dual UNION ALL SELECT '계백' , '11', '중급' FROM dual UNION ALL SELECT '계백' , '14', '초급' FROM dual UNION ALL SELECT '계백' , '16', '중급' FROM dual UNION ALL SELECT '장보고', '11', '고급' FROM dual ) SELECT * FROM t PIVOT (MIN(lv) FOR tm IN ( '09' "09" , '10' "10" , '11' "11" , '12' "12" , '13' "13" , '14' "14" , '15' "15" , '16' "16" , '17' "17" ) ) ;