// 기여도 다면 평가 대상 선정 //
truncate table 기여도다면평가
go;
// 평가조직기반으로 조직직원간의 다중조인을 통한 생성
INSERT INTO 기여도다면평가 (
피평정자사번
,피평정자
,평정자사번
,평정자
,평정자소속
,의미성,기여도,성장가능성,보상기회
,평점
,평가소속
,랭크
,상태
,다면평가그룹
,평정그룹
,입사일자
,평정자평정그룹
,평정자입사일자
,OWNER_ID
,OWNER_NAME
,REG_DATETIME
,REG_USER_ID
,REG_USER_NAME
,EDT_DATETIME
,EDT_USER_ID
,EDT_USER_NAME
)
select
trim(a.사번) as 피평정자사번
,trim(a.성명) as 피평정자이름
,trim(b.사번) as 평정자사번
,trim(b.성명) as 평정자이름
,b.조직명
,3,3,3,3
,12
,a.평가조직
, RANK() OVER (PARTITION BY a.평가조직, a.사번 ORDER BY b.사번 DESC) AS 랭크
, '평가전'
, a.다면평가그룹
, a.평정그룹
, a.입사일자
, b.평정그룹
, b.입사일자
,:userId
,:userName
,:now
,:userId
,:userName
,:now
,:userId
,:userName
from 사원 a
inner join 사원 b on a.평가조직 = b.평가조직 and a.사번 != b.사번
and a.평가조직 not in ('인사부/휴직','-')
and a.평정그룹 in ('1~3급(부점장)', '1~3급(부점장외)', '4급', '5~6급','공무직원')
and b.평정그룹 in ('x1~3급(부점장)', '1~3급(부점장외)', '4급', '5~6급','공무직원')
and a.다면평가그룹 not in ('-')
go;
// 본부장은 하위조직의 부서장에게 다면평가구성
INSERT INTO 기여도다면평가 (
피평정자사번
,피평정자
,평정자사번
,평정자
,평정자소속
,의미성,기여도,성장가능성,보상기회
,평점
,평가소속
,랭크
,상태
,다면평가그룹
,평정그룹
,입사일자
,평정자평정그룹
,평정자입사일자
,OWNER_ID
,OWNER_NAME
,REG_DATETIME
,REG_USER_ID
,REG_USER_NAME
,EDT_DATETIME
,EDT_USER_ID
,EDT_USER_NAME
)
select
trim(a.사번) as 피평정자사번
,trim(a.성명) as 피평정자이름
,trim(b.사번) as 평정자사번
,trim(b.성명) as 평정자이름
,b.조직명
,3,3,3,3
,0
,a.평가조직
, RANK() OVER (PARTITION BY a.평가조직, a.사번 ORDER BY b.사번 DESC) AS 랭크
, '평가전'
, a.다면평가그룹
, a.평정그룹
, a.입사일자
, b.평정그룹
, b.입사일자
,:userId
,:userName
,:now
,:userId
,:userName
,:now
,:userId
,:userName
from 사원 a
inner join 사원 b on a.조직명 = b.상위조직명 and a.사번 != b.사번
and a.평가조직 not in ('인사부/휴직','-')
and a.평정그룹 in ('본부장')
and b.평정그룹 in ('1~3급(부점장)')
and a.다면평가그룹 not in ('-')
// 기여도 평가 집계 //
truncate table 기여도평정자집계
go;
// 평정자를 대상으로 표준편차 계산
INSERT INTO 기여도평정자집계 (
평정자사번 ,평정자,소속,평정그룹
,평균,표준편차,건수
,OWNER_ID
,OWNER_NAME
,REG_DATETIME
,REG_USER_ID
,REG_USER_NAME
,EDT_DATETIME
,EDT_USER_ID
,EDT_USER_NAME
)
select
평정자사번 ,평정자,b.부서,b.직급,
AVG(평점) as AVG,
STDDEV_POP(평점) as STD,
COUNT(평점) as CNT,
:userId,
:userName,
:now ,
:userId,
:userName,
:now,
:userId,
:userName
FROM 기여도다면평가 a
join 사원명부 b on a.평정자사번 = b.사번
GROUP BY 평정자사번 ,평정자,b.부서,b.직급
go;
// 다면평가에 평정자 전체 표준편차 적용
update 기여도다면평가 a
join (
SELECT
COUNT(평점) as CNT,
AVG(평점) as AVG,
MAX(평점) as MAX,
MIN(평점) as MIN,
STDDEV_POP(평점) as STD
FROM 기여도다면평가
where 평점 > 0
) b
set 평정자전체평균 = b.AVG
, 평정자전체편차 = b.STD
go;
// 다면평가에 평정자 표준편차 적용
UPDATE 기여도다면평가 a
join 기여도평정자집계 b on a.평정자사번 = b.평정자사번
SET
a.평정자평균 = b.평균
,a.평정자편차 = b.표준편차
,a.점조정 = b.표준편차
go;
UPDATE 기여도다면평가 a SET 점조정 = 0.00000001 where 점조정 = 0
go;
UPDATE 기여도다면평가 a SET 조정점수 = 평정자전체평균 + 평정자전체편차 * (( 평점 - 평정자평균) / 점조정)
go;
// 피평정자 점수 집계
truncate table 기여도평가결과
go;
INSERT INTO 기여도평가결과 (
피평정자사번 ,피평정자 ,평가소속,다면평가그룹,평정그룹,입사일자,기여도점수
,S01
,S02
,S03
,S04
,S05
,S06
,S07
,S08
,S09
,S10
,S11
,S12
,OWNER_ID
,OWNER_NAME
,REG_DATETIME
,REG_USER_ID
,REG_USER_NAME
,EDT_DATETIME
,EDT_USER_ID
,EDT_USER_NAME
)
SELECT
피평정자사번, 피평정자, 평가소속, 다면평가그룹, 평정그룹,입사일자,AVG(조정점수),
SUM(IF(랭크 = 1, 조정점수, 0)) AS S01,
SUM(IF(랭크 = 2, 조정점수, 0)) AS S02,
SUM(IF(랭크 = 3, 조정점수, 0)) AS S03,
SUM(IF(랭크 = 4, 조정점수, 0)) AS S04,
SUM(IF(랭크 = 5, 조정점수, 0)) AS S05,
SUM(IF(랭크 = 6, 조정점수, 0)) AS S06,
SUM(IF(랭크 = 7, 조정점수, 0)) AS S07,
SUM(IF(랭크 = 8, 조정점수, 0)) AS S08,
SUM(IF(랭크 = 9, 조정점수, 0)) AS S09,
SUM(IF(랭크 = 10, 조정점수, 0)) AS S10,
SUM(IF(랭크 = 11, 조정점수, 0)) AS S11,
SUM(IF(랭크 = 12, 조정점수, 0)) AS S12,
:userId,
:userName,
:now ,
:userId,
:userName,
:now,
:userId,
:userName
FROM (
SELECT
피평정자사번, 피평정자, 평가소속, 다면평가그룹, 평정그룹, 조정점수,입사일자,
RANK() OVER (PARTITION BY 평가소속,피평정자사번 ORDER BY 평정자평정그룹, 평정자입사일자, 평정자사번 DESC) AS 랭크
FROM 기여도다면평가
) a
GROUP BY 피평정자사번, 피평정자, 평가소속, 다면평가그룹, 평정그룹,입사일자;
go;