회의실 예약 화면을 개발하려고 합니다.
좌측에 회의실 명, 상단에 30분단위로 07시 ~ 22시 까지 칼럼을 나눠서 보여주려고 합니다.
마농님께서 답변을 주셔서 두줄이 나오는 문제는 해결했습니다.
다시한번 감사드립니다.
다른 문제가 발생하여 문의를 드리고자 합니다.
회의실 예약 Table은
사원번호
기준일
회의실코드
시작일
종료일
시작시간
종료시간
으로 구성하였습니다.
예를 들어,
2016-01-27 2016-01-27 10:00 ~ 15:00 회의실1 홍길동
2016-01-27 2016-01-30 16:00 ~ 20:00 회의실1 백두산
이처럼 예약을 신청하면 두번째 예약은 27일 16:00 부터 30일 20:00 까지 모두 사용으로 나와야 하는데
16:00 ~ 20:00 까지만 사용으로 나오는 문제가 있네요..
샘플 쿼리는 아래와 같습니다.. 허접한 부분은 양해 부탁드립니다. (10G 사용중입니다.)
중간에 쿼리를 잘라 옮겨서 , 라던지 alias 등이 제대로 맞지 않는 점 감안하시기 바랍니다.
참고로 'D'는 반납완료, 'I'는 사용중, 'X'는 예약불가입니다.
select resource_cd,
MIN(CASE WHEN t0700 is null THEN null WHEN STD_YMD < STA_YMD OR STD_YMD > END_YMD THEN NULL ELSE t0700 END) t0700,
MIN(CASE WHEN t0730 is null THEN null WHEN STD_YMD < STA_YMD OR STD_YMD > END_YMD THEN NULL ELSE t0730 END) t0730,
MIN(CASE WHEN t0800 is null THEN null WHEN STD_YMD < STA_YMD OR STD_YMD > END_YMD THEN NULL ELSE t0800 END) t0700,
MIN(CASE WHEN t0830 is null THEN null WHEN STD_YMD < STA_YMD OR STD_YMD > END_YMD THEN NULL ELSE t0830 END) t0830,
MIN(CASE WHEN t0900 is null THEN null WHEN STD_YMD < STA_YMD OR STD_YMD > END_YMD THEN NULL ELSE t0900 END) t0900,
MIN(CASE WHEN t0930 is null THEN null WHEN STD_YMD < STA_YMD OR STD_YMD > END_YMD THEN NULL ELSE t0930 END) t0930,
MIN(CASE WHEN t1000 is null THEN null WHEN STD_YMD < STA_YMD OR STD_YMD > END_YMD THEN NULL ELSE t1000 END) t1000,
from (
select a.resource_cd,
std_ymd,
STA_YMD,
END_YMD,
CASE WHEN STD_YMD < TRUNC(SYSDATE) THEN
CASE WHEN STD_YMD BETWEEN STA_YMD AND END_YMD THEN
CASE WHEN '0700' >= STA_TIME AND '0700' < END_TIME THEN
CASE WHEN TO_DATE(TO_CHAR(END_YMD,'YYYYMMDD')||END_TIME||'00','YYYYMMDD HH24:MI:SS') <= SYSDATE THEN
'D'
WHEN SYSDATE BETWEEN TO_DATE(TO_CHAR(STA_YMD,'YYYYMMDD')||STA_TIME||'00','YYYYMMDD HH24:MI:SS') AND
TO_DATE(TO_CHAR(END_YMD,'YYYYMMDD')||END_TIME||'00','YYYYMMDD HH24:MI:SS') THEN
'I'
END
END
ELSE 'X'
END
ELSE
CASE WHEN STD_YMD BETWEEN STA_YMD AND END_YMD THEN
CASE WHEN '0700' >= STA_TIME AND '0700' < END_TIME THEN
CASE WHEN TO_DATE(TO_CHAR(END_YMD,'YYYYMMDD')||END_TIME||'00','YYYYMMDD HH24:MI:SS') <= SYSDATE THEN
'D'
WHEN SYSDATE BETWEEN TO_DATE(TO_CHAR(STA_YMD,'YYYYMMDD')||STA_TIME||'00','YYYYMMDD HH24:MI:SS') AND
TO_DATE(TO_CHAR(END_YMD,'YYYYMMDD')||END_TIME||'00','YYYYMMDD HH24:MI:SS') THEN
'I'
END
END
ELSE 'X'
END
END AS T0700,
CASE WHEN STD_YMD < TRUNC(SYSDATE) THEN
CASE WHEN STD_YMD BETWEEN STA_YMD AND END_YMD THEN
CASE WHEN '0730' >= STA_TIME AND '0730' < END_TIME THEN
CASE WHEN TO_DATE(TO_CHAR(END_YMD,'YYYYMMDD')||END_TIME||'00','YYYYMMDD HH24:MI:SS') <= SYSDATE THEN
'D'
WHEN SYSDATE BETWEEN TO_DATE(TO_CHAR(STA_YMD,'YYYYMMDD')||STA_TIME||'00','YYYYMMDD HH24:MI:SS') AND
TO_DATE(TO_CHAR(END_YMD,'YYYYMMDD')||END_TIME||'00','YYYYMMDD HH24:MI:SS') THEN
'I'
END
END
ELSE 'X'
END
ELSE
CASE WHEN STD_YMD BETWEEN STA_YMD AND END_YMD THEN
CASE WHEN '0730' >= STA_TIME AND '0730' < END_TIME THEN
CASE WHEN TO_DATE(TO_CHAR(END_YMD,'YYYYMMDD')||END_TIME||'00','YYYYMMDD HH24:MI:SS') <= SYSDATE THEN
'D'
WHEN SYSDATE BETWEEN TO_DATE(TO_CHAR(STA_YMD,'YYYYMMDD')||STA_TIME||'00','YYYYMMDD HH24:MI:SS') AND
TO_DATE(TO_CHAR(END_YMD,'YYYYMMDD')||END_TIME||'00','YYYYMMDD HH24:MI:SS') THEN
'I'
END
END
ELSE 'X'
END
END AS T0730,
from MT_ROOM_reserve a,
(select sysdate as std_ymd from dual) b
group by resource_cd
|