년도별 직원수를 구하려고 합니다. 0 6 1,976

by 보일듯말듯 [2015.12.02 13:43:58]


SELECT a.USER_ID,
       a.BR_ID,
       b.BR_NM,
       a.USER_NM,
       a.DEPT_ID,
       c.NM AS DEPT_NM,
       a.USER_POS,
       to_number(a.ENTER_DT) AS enter_dt,

       to_number(a.out_dt) AS out_dt,

       a.loan_st,
       a.out_dt,
       a.use_yn,
       a.dept_out
  FROM USERS a,
       BRANCH b,
       (SELECT *
         FROM CODE
        WHERE c_st='0002'
       ) c,
       mail_mng d
 WHERE a.BR_ID = b.BR_ID
       AND a.mail_id=d.userid(+)
       AND a.DEPT_ID = c.CODE(+)
       AND a.user_pos IN ('이사', '팀장','차장', '과장','대리','사원') 
       AND a.ENTER_DT <= '기준일'

 

a.enter_dt : 입사일 a.out_dt : 퇴사일

 

당해를 기준으로  5년치의 데이터를 뽑으려고 합니다.

퇴사자는 out_dt 에 퇴사 일자를 입력합니다. 

예를들어 2011년 12월 31일 기준으로 조회시 위에 쿼리처럼 하면 2011-12-31 일자 기준으로 입사일자를 검색해서 리스트를 보여줍니다. 근데 검색된 리스트 중에서 out_dt 가 2011년 1월 1일 이전에 한 사람도 다 나옵니다.

조건을 어떻게 줘야 2011년도에 해당하는 사람들리스트만 가져올 수 있을까요.

out_dt 에는 퇴사일자가 들어가 있는데 훨씬 오래전에 퇴사한 사람들은 '00000000' 으로 들어가 있습니다.

 

by 마농 [2015.12.02 14:01:22]

간단하게 기준일자가 입사일과 퇴사일 사이에 있으면 됩니다.
이 때 입사일과 퇴사일의 포함여부 에 따라 이퀄조건이 붙을지 안붙을지 미묘하게 조정하셔야 하구요.


그런데 퇴사일의 정보가 의심스럽네요?
오래전에 퇴사한 사람들은 '00000000' 이라고 하는데
오래전의 의미가 정확하게 어떤 건가요? 목록에서 처음부터 빼면 되는 건가요?
아직 퇴사하지 않은 사람의 정보는 어떤값이 들어 있나요?
  - 아무것도 없다. Null
  - '99991231'
  - '00000000' 혹시 이건 아니겠죠? 이러면 오래전 퇴사자와 겹칩니다.


by 보일듯말듯 [2015.12.02 14:03:05]

저희가 퇴사일자 관리한게 첨부터 관리한게 아니라서

그 관리시작 이전은 000000으로 채워 넣어 버렸습니다.


by 마농 [2015.12.02 14:14:23]

아직 퇴사하지 않은 사람의 정보는요?


by 보일듯말듯 [2015.12.02 14:32:50]

퇴사자는 퇴사일자가 입력되어 있습니다.

관리하기 이전에 퇴사한 사람들은 00000000 으로 되어 있습니다.

퇴사하지 않은 사람은 null 입니다.


by 마농 [2015.12.02 14:54:32]
SELECT *
  FROM users
 WHERE enter_dt <= '20111231'
   AND NVL(out_dt, '9') > '20111231'    -- '=' 조건이 붙을지 않붙을지 의사결정
;

 


by 보일듯말듯 [2015.12.02 15:22:12]

몇시간 고민하고 있던 내용에 도움을 주셔서 감사드립니다. ^^

 

 

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