로우데이터
| 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는 엑셀이 잘 안붙여져서 잘 안보이시면 파일 첨부도 했습니다.
1. 조건요일 화요일의 필요데이터가 이철수 인데 이영희 로 표기되어 있고
- 오타인 거죠?
2. group_idx 값이 뭔가요?
group_idx 를 이용해 그룹핑하면 쉬울 듯 한데?
group_idx 값이 좀 이상하긴 하네요?
이철수 는 3,4 로 나뉘어 있고? 이만식 도 4를 가지고 있어 이철수 와 중복되고?
group_idx 값이 맞게 표현된 것인지? 아니면 오타인지?
1. 오타였습니다. 수정했습니다.
2. 로우데이터가 class_idx로만 저장되서 따로 강사별 마스터를 등록할때 강사별 날짜 시간으로 해서 group_idx를 만들어서 묶어 준것입니다.
마농님 죄송합니다. 오타였습니다. 데이터 다시 수정했습니다.
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, 강사 만 하셔도 되겠네요.
group_idx는 테이블에 강사수강 등록할때 같이 등록 합니다.
정말 감사 합니다. 마농님 다른 테이블이랑 다시 응용해서 잘쓰겠습니다.^^
즐거운 하루 되세요