mysql 쿼리 질문 드립니다. 0 4 1,148

by 진짜강동원 [MySQL] [2016.11.02 13:35:43]


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            

 

 

 

 

by 마농 [2016.11.02 14:24:38]
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
;

 


by 진짜강동원 [2016.11.02 15:11:11]

마농님, 답변 정말 감사합니다.

한 가지 더 궁금한게 있습니다.

중간에

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'

이 쿼리들도 예약테이블에서 자동으로 가져오려면 어떻게 해야되는지 여쭤봐도 될까요?


by 마농 [2016.11.02 15:13:41]

괄호 시작 부터 괄호 끝 까지 빼시면 됩니다.


by 진짜강동원 [2016.11.02 15:16:59]

헐... 감사합니다~~ ㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입