tblResv 테이블
r_no | r_date | r_time | r_name | p_gubun | p_name |
1 | 2016-11-02 | 10:00 ~ 10:30 | 강감찬 | 상품1 | aa |
2 | 2016-11-02 | 10:30 ~ 11:00 | 이순신 | 상품1 | ab |
3 | 2016-11-02 | 12:00 ~ 12:30 | 홍길동 | 상품1 | abc |
4 | 2016-11-03 | 10:00 ~ 10:30 | 장영실 | 상품1 | aa |
5 | 2016-11-04 | 11:00 ~ 11:30 | 임꺽정 | 상품2 | ba |
6 | 2016-11-05 | 12:00 ~ 12:30 | 황희 | 상품1 | ad |
7 | 2016-11-02 | 17:00 ~ 17:30 | 율곡 | 상품2 | bc |
조회 결과는 아래 표처럼 좌측은 시간 고정, 컬럼헤더는 닷넷에서 제공하는 monthCalendar에서
1주일 단위로 날짜를 가져옵니다. 그 후에 조회 결과를 좌측 날짜와 헤더의 날짜에 맞게
있는 것은 뿌려주고 없는 것은 공백으로 보여줘야 하는데..
쿼리를 어떻게 짜면 될까요?
시간 | 2016-10-31 | 2016-11-01 | 2016-11-02 | 2016-11-03 | ~~~~ | 2016-11-06 |
10:00 ~ 10:30 | ||||||
10:30 ~ 11:00 | ||||||
11:00 ~ 11:30 | ||||||
~~~~~~ | ||||||
20:00 ~ 20:30 | ||||||
20:30 ~ 21:00 |
SELECT a.r_time , MIN(CASE w WHEN 1 THEN v END) "2016-10-31" , MIN(CASE w WHEN 2 THEN v END) "2016-11-01" , MIN(CASE w WHEN 3 THEN v END) "2016-11-02" , MIN(CASE w WHEN 4 THEN v END) "2016-11-03" , MIN(CASE w WHEN 5 THEN v END) "2016-11-04" , MIN(CASE w WHEN 6 THEN v END) "2016-11-05" , MIN(CASE w WHEN 0 THEN v END) "2016-11-06" FROM (SELECT '10:00 ~ 10:30' r_time UNION ALL SELECT '10:30 ~ 11:00' UNION ALL SELECT '11:00 ~ 11:30' UNION ALL SELECT '11:30 ~ 12:00' UNION ALL SELECT '12:00 ~ 12:30' UNION ALL SELECT '12:30 ~ 13:00' UNION ALL SELECT '13:00 ~ 13:30' UNION ALL SELECT '13:30 ~ 14:00' UNION ALL SELECT '14:00 ~ 14:30' UNION ALL SELECT '14:30 ~ 15:00' UNION ALL SELECT '15:00 ~ 15:30' UNION ALL SELECT '15:30 ~ 16:00' UNION ALL SELECT '16:00 ~ 16:30' UNION ALL SELECT '16:30 ~ 17:00' UNION ALL SELECT '17:00 ~ 17:30' UNION ALL SELECT '17:30 ~ 18:00' UNION ALL SELECT '18:00 ~ 18:30' UNION ALL SELECT '18:30 ~ 19:00' UNION ALL SELECT '19:00 ~ 19:30' UNION ALL SELECT '19:30 ~ 20:00' UNION ALL SELECT '20:00 ~ 20:30' UNION ALL SELECT '20:30 ~ 21:00' ) a -- 시간정보코드 -- LEFT OUTER JOIN (SELECT r_time , DATE_FORMAT(r_date, '%w') w , CONCAT(r_name, '-', p_gubun, '-', p_name) v FROM (SELECT 1 r_no, '2016-11-02' r_date, '10:00 ~ 10:30' r_time , '강감찬' r_name, '상품1' p_gubun, 'aa' p_name UNION ALL SELECT 2, '2016-11-02', '10:30 ~ 11:00', '이순신', '상품1', 'ab' UNION ALL SELECT 3, '2016-11-02', '12:00 ~ 12:30', '홍길동', '상품1', 'abc' UNION ALL SELECT 4, '2016-11-03', '10:00 ~ 10:30', '장영실', '상품1', 'aa' UNION ALL SELECT 5, '2016-11-04', '11:00 ~ 11:30', '임꺽정', '상품2', 'ba' UNION ALL SELECT 6, '2016-11-05', '12:00 ~ 12:30', '황희' , '상품1', 'ad' UNION ALL SELECT 7, '2016-11-02', '17:00 ~ 17:30', '율곡' , '상품2', 'bc' ) tblResv -- 원본테이블 -- WHERE r_date BETWEEN '2016-10-31' AND '2016-11-06' ) b ON a.r_time = b.r_time GROUP BY a.r_time ;
마농님, 답변 정말 감사합니다.
한 가지 더 궁금한게 있습니다.
중간에
SELECT 1 r_no, '2016-11-02' r_date, '10:00 ~ 10:30' r_time, '강감찬' r_name, '상품1' p_gubun, 'aa' p_name
UNION ALL SELECT 2, '2016-11-02', '10:30 ~ 11:00', '이순신', '상품1', 'ab'
UNION ALL SELECT 3, '2016-11-02', '12:00 ~ 12:30', '홍길동', '상품1', 'abc'
UNION ALL SELECT 4, '2016-11-03', '10:00 ~ 10:30', '장영실', '상품1', 'aa'
UNION ALL SELECT 5, '2016-11-04', '11:00 ~ 11:30', '임꺽정', '상품2', 'ba'
UNION ALL SELECT 6, '2016-11-05', '12:00 ~ 12:30', '황희' , '상품1', 'ad'
UNION ALL SELECT 7, '2016-11-02', '17:00 ~ 17:30', '율곡' , '상품2', 'bc'
UNION ALL SELECT 8, '2016-11-01', '13:00 ~ 13:30', '신사임당' , '상품2', 'bc'
이 쿼리들도 예약테이블에서 자동으로 가져오려면 어떻게 해야되는지 여쭤봐도 될까요?