쿼리 문의 드립니다... 0 5 1,319

by 가을하늘이 [SQL Query] [2013.03.05 14:48:42]



안녕하세요..

고수님들께 쿼리 질문좀 드릴려구요..

필드가 아래와 같이 있습니다..

일자 사원번호 사원명 연장근무시간

각 사원들마다 1주일(평일 월~금) 에 연장근무시간이 12시간을 초과한 사람을 찾아야 하는데..

우찌해야 할지 감이 안오네요..

고수님들 좀 도와주세요..
by 부쉬맨 [2013.03.05 15:10:51]
일단 일주일의 where 절 선언
그리고 sum(근무시간) + 12 한 검색조건을 주시면되겠네요.

select 사원, 근무
from
(
select 사원,sum(근무시간) 근무
from 테이블
where 날짜검색조건 으로 일주일사원별로 
group by 사원
) where 근무+12 > 근무시간+12시간 입력

by 마농 [2013.03.05 16:07:15]
-- 1. 일자 컬럼이 Date형 인 경우 --
SELECT 사원번호, 사원명
     , SUM(연장근무시간)
  FROM 테이블
 WHERE TO_CHAR(일자, 'd') NOT IN ('1', '7')
 GROUP BY 사원번호, 사원명, TRUNC(일자, 'd')
HAVING SUM(연장근무시간) > 12
;
-- 2. 일자 컬럼이 yyyymmdd 형식의 Varchar2형인 경우 --
SELECT 사원번호, 사원명
     , SUM(연장근무시간)
  FROM 테이블
 WHERE TO_CHAR(TO_DATE(일자, 'yyyymmdd'), 'd') NOT IN ('1', '7')
 GROUP BY 사원번호, 사원명, TRUNC(TO_DATE(일자, 'yyyymmdd'), 'd')
HAVING SUM(연장근무시간) > 12
;

by 아발란체 [2013.03.05 16:50:36]
CREATE TABLE TEST (
  일자 VARCHAR(8),
  사원번호 VARCHAR(10),
  사원명 VARCHAR(10),
  연장근무시간 INT
);

INSERT INTO TEST VALUES('20130304', 'A001', '홍길동', 1);
INSERT INTO TEST VALUES('20130305', 'A001', '홍길동', 2);
INSERT INTO TEST VALUES('20130306', 'A001', '홍길동', 1);
INSERT INTO TEST VALUES('20130307', 'A001', '홍길동', 3);
INSERT INTO TEST VALUES('20130308', 'A001', '홍길동', 1);
INSERT INTO TEST VALUES('20130309', 'A001', '홍길동', 1);
INSERT INTO TEST VALUES('20130310', 'A001', '홍길동', 1);
INSERT INTO TEST VALUES('20130311', 'A001', '홍길동', 1);

INSERT INTO TEST VALUES('20130307', 'A002', '길만득', 9);
INSERT INTO TEST VALUES('20130308', 'A002', '길만득', 2);
INSERT INTO TEST VALUES('20130309', 'A002', '길만득', 3);
INSERT INTO TEST VALUES('20130310', 'A002', '길만득', 5);
INSERT INTO TEST VALUES('20130311', 'A002', '길만득', 2);
INSERT INTO TEST VALUES('20130312', 'A002', '길만득', 1);
INSERT INTO TEST VALUES('20130313', 'A002', '길만득', 1);
INSERT INTO TEST VALUES('20130321', 'A002', '길만득', 2);

SELECT
  년월, 주차, 사원번호, SUM(연장근무시간)
FROM (
  SELECT
    TEST.*, TO_CHAR(TO_DATE(일자), 'YYYY-MM') 년월,
    CEIL((SUBSTR(일자, 7, 2) + TO_CHAR(TO_DATE(SUBSTR(일자 , 1, 6)||'01', 'YYYYMMDD'), 'D') - 1) / 7) 주차
  FROM
    TEST
)
GROUP BY
  년월, 주차, 사원번호
ORDER BY
  년월, 주차, 사원번호
;

by 아발란체 [2013.03.05 16:52:39]

아래 질의어에 12시간 넘는 것만 보는 것은

GROUP BY
    년월, 주차, 사원번호

다음에

HAVING
    SUM(연장근무시간) > 12

추가 해주시면 됩니다.


by 가을하늘이 [2013.03.05 17:40:20]

오~정말 감사합니다..
고수님들 덕분에 해결되었네요~^^
열심히 공부할께요~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입