by 아이린 [SQL Query] [2022.04.04 16:11:23]
로우데이터
CLASS_IDX | 요일 | DAY | FR_TIME | TO_TIME | 강사 | GROUP_IDX | 반복구분 |
1 | 월 | 20220401 | 0900 | 0950 | 홍길동 | 1 | 매일 |
2 | 화 | 20220402 | 0900 | 0950 | 홍길동 | 1 | 매일 |
3 | 수 | 20220403 | 0900 | 0950 | 홍길동 | 1 | 매일 |
4 | 월 | 20220401 | 0900 | 0950 | 이영희 | 2 | 매주 |
5 | 월 | 20220408 | 0900 | 0950 | 이영희 | 2 | 매주 |
6 | 월 | 20220415 | 0900 | 0950 | 이영희 | 2 | 매주 |
7 | 화 | 20220402 | 0900 | 0950 | 이철수 | 3 | 매주 |
8 | 화 | 20220409 | 0900 | 0950 | 이철수 | 3 | 매주 |
9 | 화 | 20220416 | 0900 | 0950 | 이철수 | 3 | 매주 |
10 | 수 | 20220403 | 1000 | 1050 | 이만식 | 4 | 매주 |
11 | 수 | 20220410 | 1000 | 1050 | 이만식 | 4 | 매주 |
12 | 수 | 20220417 | 1000 | 1050 | 이만식 | 4 | 매주 |
14 | 월 | 20220401 | 0900 | 0950 | 이희경 | 5 | 2주 |
14 | 월 | 20220415 | 0900 | 0950 | 이희경 | 5 | 2주 |
15 | 월 | 20220429 | 0900 | 0950 | 이희경 | 5 | 2주 |
필요데이터 | 조건 : 4월달 의 요일의 시간데 데이터의 시간 요일 선택한 강사 리스트 조회 |
|||||||
조건 요일 | DAY | FROM_DAY | TO_DAY | FROM_요일 | TO_요일 | FR_TIME | 강사 | |
월 | 20220401 | 20220401 | 20220403 | 월 | 수 | 0900 | 홍길동 | WHERE 조건요일 = '월' AND TIME = '0900' |
월 | 20220401 | 20220401 | 20220415 | 월 | 월 | 0900 | 이영희 | |
월 | 20220401 | 20220401 | 20220429 | 월 | 월 | 0900 | 이희경 | |
조건 요일 | DAY | FROM_DAY | TO_DAY | FROM_요일 | TO_요일 | FR_TIME | 강사 | |
화 | 20220402 | 20220401 | 20220403 | 월 | 수 | 0900 | 홍길동 | WHERE 조건요일 = '화' AND TIME = '0900' |
화 | 20220402 | 20220402 | 20220416 | 화 | 화 | 0900 | 이철수 | |
조건 요일 | DAY | FROM_DAY | TO_DAY | FROM_요일 | TO_요일 | FR_TIME | 강사 | |
수 | 20220403 | 20220403 | 20220417 | 수 | 수 | 1000 | 이만식 | WHERE 조건요일 = '수' AND TIME = '1000' |
날짜의 예로 2022년 4월달 세로 시간 가로 요일별 캘린더의 여러 강사를 선택해서 가져 올수있게 아래 필요 데이터 처럼 조회를 해야합니다.
필요 데이터의 조건별 값들이 고민 고민을 해보았지만 월, 화, 수 반복구분의 매일 때문에 가져오기가 힘든 상태입니다.
고수님들의 도움이 ㅜ필요합니다. 부탁드려요 감사합니다. EDIT는 엑셀이 잘 안붙여져서 잘 안보이시면 파일 첨부도 했습니다.
WITH t AS ( SELECT 1 class_idx, '월' 요일, '20220401' day, '0900' fr_time, '0950' to_time, '홍길동' 강사, 1 group_idx, '매일' FROM dual UNION ALL SELECT 2, '화', '20220402', '0900', '0950', '홍길동', 1, '매일' FROM dual UNION ALL SELECT 3, '수', '20220403', '0900', '0950', '홍길동', 1, '매일' FROM dual UNION ALL SELECT 4, '월', '20220401', '0900', '0950', '이영희', 2, '매주' FROM dual UNION ALL SELECT 5, '월', '20220408', '0900', '0950', '이영희', 2, '매주' FROM dual UNION ALL SELECT 6, '월', '20220415', '0900', '0950', '이영희', 2, '매주' FROM dual UNION ALL SELECT 7, '화', '20220402', '0900', '0950', '이철수', 3, '매주' FROM dual UNION ALL SELECT 8, '화', '20220409', '0900', '0950', '이철수', 3, '매주' FROM dual UNION ALL SELECT 9, '화', '20220416', '0900', '0950', '이철수', 3, '매주' FROM dual UNION ALL SELECT 10, '수', '20220403', '1000', '1050', '이만식', 4, '매주' FROM dual UNION ALL SELECT 11, '수', '20220410', '1000', '1050', '이만식', 4, '매주' FROM dual UNION ALL SELECT 12, '수', '20220417', '1000', '1050', '이만식', 4, '매주' FROM dual UNION ALL SELECT 14, '월', '20220401', '0900', '0950', '이희경', 5, '2주' FROM dual UNION ALL SELECT 14, '월', '20220415', '0900', '0950', '이희경', 5, '2주' FROM dual UNION ALL SELECT 15, '월', '20220429', '0900', '0950', '이희경', 5, '2주' FROM dual ) SELECT group_idx , MIN(DECODE(요일, :v_요일, day)) day , MIN(day) from_day , MAX(day) to_day , MIN(요일) KEEP(DENSE_RANK FIRST ORDER BY day) from_요일 , MAX(요일) KEEP(DENSE_RANK LAST ORDER BY day) to_요일 , fr_time , 강사 FROM t WHERE fr_time = :v_fr_time GROUP BY group_idx, fr_time, 강사 HAVING MIN(DECODE(요일, :v_요일, day)) IS NOT NULL ; -- group_idx 가 테이블에 없는 항목이라면? (별도로 구한 거라면?) -- GROUP BY fr_time, 강사 만 하셔도 되겠네요.