// 기여도 다면 평가 대상 선정 //



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;