database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41064 게시물 읽기
No. 41064
회의실 예약 관련 추가 문의사항
작성자
IT재벌(IT재벌)
작성일
2016-01-27 15:41ⓒ
2016-01-27 15:51ⓜ
조회수
7,984

회의실 예약 화면을 개발하려고 합니다.

좌측에 회의실 명, 상단에 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

 

이 글에 대한 댓글이 총 2건 있습니다.

SELECT resource_cd
     , MIN(CASE WHEN s < std_ymd||'0730' AND e > std_ymd||'0700' THEN NVL(x, x0700) END) t0700
     , MIN(CASE WHEN s < std_ymd||'0800' AND e > std_ymd||'0730' THEN NVL(x, x0730) END) t0730
     , MIN(CASE WHEN s < std_ymd||'0830' AND e > std_ymd||'0800' THEN NVL(x, x0800) END) t0800
     , MIN(CASE WHEN s < std_ymd||'0900' AND e > std_ymd||'0830' THEN NVL(x, x0830) END) t0830
     , MIN(CASE WHEN s < std_ymd||'0930' AND e > std_ymd||'0900' THEN NVL(x, x0900) END) t0900
     , MIN(CASE WHEN s < std_ymd||'1000' AND e > std_ymd||'0930' THEN NVL(x, x0930) END) t0930
     , MIN(CASE WHEN s < std_ymd||'1030' AND e > std_ymd||'1000' THEN NVL(x, x1000) END) t1000
     , MIN(CASE WHEN s < std_ymd||'1100' AND e > std_ymd||'1030' THEN NVL(x, x1030) END) t1030
     , MIN(CASE WHEN s < std_ymd||'1130' AND e > std_ymd||'1100' THEN NVL(x, x1100) END) t1100
     , MIN(CASE WHEN s < std_ymd||'1200' AND e > std_ymd||'1130' THEN NVL(x, x1130) END) t1130
     , MIN(CASE WHEN s < std_ymd||'1230' AND e > std_ymd||'1200' THEN NVL(x, x1200) END) t1200
     , MIN(CASE WHEN s < std_ymd||'1300' AND e > std_ymd||'1230' THEN NVL(x, x1230) END) t1230
     , MIN(CASE WHEN s < std_ymd||'1330' AND e > std_ymd||'1300' THEN NVL(x, x1300) END) t1300
     , MIN(CASE WHEN s < std_ymd||'1400' AND e > std_ymd||'1330' THEN NVL(x, x1330) END) t1330
     , MIN(CASE WHEN s < std_ymd||'1430' AND e > std_ymd||'1400' THEN NVL(x, x1400) END) t1400
     , MIN(CASE WHEN s < std_ymd||'1500' AND e > std_ymd||'1430' THEN NVL(x, x1430) END) t1430
     , MIN(CASE WHEN s < std_ymd||'1530' AND e > std_ymd||'1500' THEN NVL(x, x1500) END) t1500
     , MIN(CASE WHEN s < std_ymd||'1600' AND e > std_ymd||'1530' THEN NVL(x, x1530) END) t1530
     , MIN(CASE WHEN s < std_ymd||'1630' AND e > std_ymd||'1600' THEN NVL(x, x1600) END) t1600
     , MIN(CASE WHEN s < std_ymd||'1700' AND e > std_ymd||'1630' THEN NVL(x, x1630) END) t1630
     , MIN(CASE WHEN s < std_ymd||'1730' AND e > std_ymd||'1700' THEN NVL(x, x1700) END) t1700
     , MIN(CASE WHEN s < std_ymd||'1800' AND e > std_ymd||'1730' THEN NVL(x, x1730) END) t1730
     , MIN(CASE WHEN s < std_ymd||'1830' AND e > std_ymd||'1800' THEN NVL(x, x1800) END) t1800
     , MIN(CASE WHEN s < std_ymd||'1900' AND e > std_ymd||'1830' THEN NVL(x, x1830) END) t1830
     , MIN(CASE WHEN s < std_ymd||'1930' AND e > std_ymd||'1900' THEN NVL(x, x1900) END) t1900
     , MIN(CASE WHEN s < std_ymd||'2000' AND e > std_ymd||'1930' THEN NVL(x, x1930) END) t1930
     , MIN(CASE WHEN s < std_ymd||'2030' AND e > std_ymd||'2000' THEN NVL(x, x2000) END) t2000
     , MIN(CASE WHEN s < std_ymd||'2100' AND e > std_ymd||'2030' THEN NVL(x, x2030) END) t2030
     , MIN(CASE WHEN s < std_ymd||'2130' AND e > std_ymd||'2100' THEN NVL(x, x2100) END) t2100
     , MIN(CASE WHEN s < std_ymd||'2200' AND e > std_ymd||'2130' THEN NVL(x, x2130) END) t2130
     , MIN(CASE WHEN s < std_ymd||'2230' AND e > std_ymd||'2200' THEN NVL(x, x2200) END) t2200
     , MIN(CASE WHEN s < std_ymd||'2300' AND e > std_ymd||'2230' THEN NVL(x, x2230) END) t2230
  FROM (SELECT resource_cd
             , std_ymd
             , CASE WHEN std_ymd||'0700' < tm THEN 'X' END x0700
             , CASE WHEN std_ymd||'0730' < tm THEN 'X' END x0730
             , CASE WHEN std_ymd||'0800' < tm THEN 'X' END x0800
             , CASE WHEN std_ymd||'0830' < tm THEN 'X' END x0830
             , CASE WHEN std_ymd||'0900' < tm THEN 'X' END x0900
             , CASE WHEN std_ymd||'0930' < tm THEN 'X' END x0930
             , CASE WHEN std_ymd||'1000' < tm THEN 'X' END x1000
             , CASE WHEN std_ymd||'1030' < tm THEN 'X' END x1030
             , CASE WHEN std_ymd||'1100' < tm THEN 'X' END x1100
             , CASE WHEN std_ymd||'1130' < tm THEN 'X' END x1130
             , CASE WHEN std_ymd||'1200' < tm THEN 'X' END x1200
             , CASE WHEN std_ymd||'1230' < tm THEN 'X' END x1230
             , CASE WHEN std_ymd||'1300' < tm THEN 'X' END x1300
             , CASE WHEN std_ymd||'1330' < tm THEN 'X' END x1330
             , CASE WHEN std_ymd||'1400' < tm THEN 'X' END x1400
             , CASE WHEN std_ymd||'1430' < tm THEN 'X' END x1430
             , CASE WHEN std_ymd||'1500' < tm THEN 'X' END x1500
             , CASE WHEN std_ymd||'1530' < tm THEN 'X' END x1530
             , CASE WHEN std_ymd||'1600' < tm THEN 'X' END x1600
             , CASE WHEN std_ymd||'1630' < tm THEN 'X' END x1630
             , CASE WHEN std_ymd||'1700' < tm THEN 'X' END x1700
             , CASE WHEN std_ymd||'1730' < tm THEN 'X' END x1730
             , CASE WHEN std_ymd||'1800' < tm THEN 'X' END x1800
             , CASE WHEN std_ymd||'1830' < tm THEN 'X' END x1830
             , CASE WHEN std_ymd||'1900' < tm THEN 'X' END x1900
             , CASE WHEN std_ymd||'1930' < tm THEN 'X' END x1930
             , CASE WHEN std_ymd||'2000' < tm THEN 'X' END x2000
             , CASE WHEN std_ymd||'2030' < tm THEN 'X' END x2030
             , CASE WHEN std_ymd||'2100' < tm THEN 'X' END x2100
             , CASE WHEN std_ymd||'2130' < tm THEN 'X' END x2130
             , CASE WHEN std_ymd||'2200' < tm THEN 'X' END x2200
             , CASE WHEN std_ymd||'2230' < tm THEN 'X' END x2230
          FROM 회의실코드테이블
             , (SELECT '20160128' std_ymd    -- 조회일자
                     , TO_CHAR(sysdate, 'yyyymmddhh24mi') tm -- 현재시각
                  FROM dual)
        ) a
     , (SELECT resource_cd
             , sta_ymd
             , end_ymd
             , sta_ymd || sta_time s
             , end_ymd || end_time e
             , CASE WHEN TO_CHAR(sysdate, 'yyyymmddhh24mi') < sta_ymd || sta_time THEN 'R' -- 예약
                    WHEN TO_CHAR(sysdate, 'yyyymmddhh24mi') > end_ymd || end_time THEN 'D' -- 반납
                    ELSE 'I' -- 사용중
                END x
          FROM mt_room_reserve
        ) b
 WHERE a.resource_cd = b.resource_cd(+)
   AND a.std_ymd BETWEEN b.sta_ymd(+) AND b.end_ymd(+)
 ORDER BY a.resource_cd
;

마농(manon94)님이 2016-01-29 08:43에 작성한 댓글입니다.

마농님 감사합니다.

많은 도움이 되었습니다..~~

IT재벌(IT재벌)님이 2016-01-29 16:09에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41068쿼리 ID가 같으면 값을 SUM 하는 거요. [1]
전설종이
2016-01-30
7976
41067rank 맨위 1위,2위 마지막 1윌,2위 [1]
초보
2016-01-29
8234
41065INNER JOIN [2]
입문자
2016-01-28
7655
41064회의실 예약 관련 추가 문의사항 [2]
IT재벌
2016-01-27
7984
41063INDEX와 상관없이 조회속도가 이상합니다. [3]
입문자
2016-01-26
7847
41062어떤 식으로 설계하면 좋을까요?
안드로메지션
2016-01-25
7794
41061ROWNUM 관련 질문입니다. [2]
조동건
2016-01-24
7902
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다