월별 직원현황 쿼리 부탁드려요~ 0 3 2,678

by 현씨 [SQL Query] [2012.08.02 19:22:27]



SELECT a.a+ b.b 정원, b.b 퇴사인원, ROUND(b.b/(a.a+b.b),2) 퇴사율
FROM
 (SELECT COUNT(*) a 
  FROM   payroll.insabase
  WHERE  TO_CHAR(LAST_DAY(TO_DATE(:yymm,'yyyymm')),'yyyymmdd')  BETWEEN
TO_CHAR(ib_date,'YYYYMMDD')   AND TO_CHAR(NVL(out_date,SYSDATE),'YYYYMMDD')
  AND jikgub BETWEEN 1 AND 6) a,
 (SELECT COUNT(*) b
  FROM   payroll.insabase
  WHERE  TO_CHAR(out_date,'yyyymm') = :yymm
  AND jikgub BETWEEN 1 AND 6) b


고민고민하다 올려요~
정말 머리가 너무 아파요 ㅜㅜ
요게~입사날과 퇴직날을 계산해서
그달의 정원을 계산하는 쿼리인데요~

이 쿼리를 가지고 2009년 부터 2012년까지 월별 직급별 정원 현황을 짜야 합니다.
전혀 머릿속이 멍하고 아무생각이 안나요~ 도와주세요~ㅜㅜ
by 부쉬맨 [2012.08.03 09:14:26]
테이블구조를 잘몰라서그러긴한데
jikgub BETWEEN 1 AND 6 < -- 요의미가먼지모르겠네요..

case 문을 사용해서 
정말 심플하게 끝낼수있을꺼같습니다.


ex) 


select
정원,퇴사인원, round(퇴사인원/(정원+퇴사인원),2) 퇴사율
(
  sum(case when ib_date > out_date  null then 1 end ) 정원,
  sum(case when out_date is not null then 1 end ) 퇴사인원  
  FROM   payroll.insabase
)

이런식으로 만들면되지않을까합니다.
정원을 뽑는 기준이 현재시점에 근무하는 사람이어야하는지 
머 그런건 생각하셔서 조건추가하시면될꺼같네요.

by 마농 [2012.08.06 10:40:41]

입사일과 퇴사일로 정,현원을 구할수는 있습니다.
그러나 직급별 자료는 구하기 힘드실 것입니다.
직급은 계속 변하니까요.
인사마스터의 직급은 현재직급만 표시되므로 당시 직급을 구하는 로직이 별도로 필요해 보이네요.
월말기준으로 사원의 직급을 구하는 함수를 하나 만드시고
해당 함수를 기반으로 [월말기준 인사마스터]를 별도로 만들어 관리하세요.
만들어둔 데이터는 두고두고 써먹을 수 있습니다.


by 현씨 [2012.08.06 18:52:56]

네~ 두분 답변달아주셔서 감사합니다.^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입