근무시간 계산 0 2 1,453

by 가을하늘이 [SQL Query] [2018.07.17 17:04:11]


특정기간(해당월의 주) 동안 연장근무(YEON_TOT)가 12시간 초과 되는 사람을 찾는 쿼리입니다.

보통 1주일을 일요일~토요일 로 계산을 하는데, 월~일요일로 계산을 해달라고 하네요..

그리고 토~일요일은 특근시간(TUK_TIME) 을 연장시간과 합해서 계산이 되게 해달라고 하네요..

어떤식으로 변경을 하면 될까요??

SELECT TO_CHAR(TO_DATE(A.DATE,'YY/MM/DD'),'IYIW'),
          A.SABEON,  
          SUM(A.YEON_TOT),  
          A.NAME,
          B.SAEOPNM,
          B.DEPTNM,
          B.DEPTNM1
 FROM insa B,  
          MONTH A 
WHERE B.SABEON = A.SABEON
   AND SUBSTR(A.DATE,1,6) = '201806'
   AND B.GIBONGU BETWEEN '2' AND '4'
   and Substrb(TO_CHAR(TO_DATE(A.DATE,'YY/MM/DD'),'D'),1,2) between '1' and '7'
   AND A.CODE IN ('00','02','05')
GROUP BY TO_CHAR(TO_DATE(A.DATE,'YY/MM/DD'),'IYIW'),A.SABEON,A.NAME,B.SAEOPNM,B.DEPTNM,B.DEPTNM1

HAVING   SUM(A.YEON_TOT) > 12

ORDER BY A.SABEON

by 마농 [2018.07.17 17:42:09]

○ 연장근무시간에 특근시간을 더하려면
  - 굳이 요일을 체크할 필요가 있는지 의문이네요?
  - 변경전 : SUM(a.yeon_tot)
  - 변경후 : SUM(a.yeon_tot + a.tuk_time)
  - 굳이 요일을 체크한다면.
  - SUM(a.yeon_tot + CASE WHEN TO_CHAR(TO_DATE(a.date, 'yyyymmdd'), 'd') IN ('1','7') THEN a.tuk_time ELSE 0 END)

○ 기타 쿼리에서 비효율적인 부분들 개선
1. 컬럼을 가공하여 조건형식에 맞추지 마시고, 조건을 가공하여 컬럼형식에 맞추세요.
  - 변경전 : SUBSTR(a.date, 1, 6) = '201806'
  - 변경후 : a.date LIKE '201806%'
2. 날짜 변환시 실제 포멧에 맞게 정확하게 포멧을 적어주세요.
  - 변경전 : TO_DATE(a.date, 'yy/mm/dd')
  - 변경후 : TO_DATE(a.date, 'yyyymmdd')
3. 무의미한 조건은 빼주시구요.
  - Substrb(TO_CHAR(TO_DATE(A.DATE,'YY/MM/DD'),'D'),1,2) between '1' and '7'

SELECT TO_CHAR(TO_DATE(a.date, 'yyyymmdd'), 'iyiw') iyiw
     , a.sabeon
     , SUM(a.yeon_tot + a.tuk_time) tot_time
     , a.name
     , b.saeopnm
     , b.deptnm
     , b.deptnm1
  FROM insa  b
     , month a
 WHERE b.sabeon = a.sabeon
   AND a.date LIKE '201806%'
   AND b.gibongu BETWEEN '2' AND '4'
   AND a.code IN ('00', '02', '05')
 GROUP BY TO_CHAR(TO_DATE(a.date, 'yyyymmdd'), 'iyiw')
     , a.sabeon, a.name, b.saeopnm, b.deptnm, b.deptnm1
HAVING SUM(a.yeon_tot + a.tuk_time) > 12
 ORDER BY a.sabeon
;

 


by 가을하늘이 [2018.07.18 13:36:09]

감사합니다~

한번에 해결됐습니다~

더 열심히 공부해야겠네요~

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