평가그룹별, 평가자별 등급 등급 가져오기 0 4 900

by Kaiger [SQL Query] [2020.08.12 11:03:11]


안녕하세요 

 

평가그룹별, 평가자별 등급을 가져오려고 합니다

평가그룹은 팀장,팀원,계약직

데이터는 이렇습니다

 

평가그룹 || 성명 || 부서 || 점수 ||평가자

팀장 || 팀장1 || 개발1팀 || 90점 ||홍길동

팀원 || 팀원1 || 개발1팀 || 99점 || 홍길동

팀원 || 팀원2 || 개발1팀 || 70점 ||홍길동

팀원 || 팀원3 || 개발1팀 || 75점 ||홍길동

계약직 || 팀원4 || 개발1팀 ||73점 || 홍길동

팀장 || 팀장1 || 개발2팀 || 95점 ||홍길동

팀장 || 팀장3 || 인사팀 || 78점 ||임꺽정

팀원 || 팀원5 || 인사팀 || 81점 ||임꺽정

계약직 || 팀원6 || 인사팀 || 65점 ||임꺽정

 

등급은 다른 테이블에 있습니다. 평가그룹별로 아래와 같은 데이터가 있습니다. (팀원, 계약직도 아래와 같은 형태입니다)

 

원하는 데이터는

평가자 기준으로 팀장,팀원, 계약직 인원의 등급을 보여줘야 합니다

결과 내용을 보면

평가그룹 || 성명 || 부서 || 점수 ||평가자 || 등급

팀장 || 팀장1 || 개발1팀 || 90점 ||홍길동 || G

팀원 || 팀원1 || 개발1팀 || 99점 || 홍길동 || E

팀원 || 팀원2 || 개발1팀 || 70점 ||홍길동 || G

팀원 || 팀원3 || 개발1팀 || 75점 ||홍길동 || G

계약직 || 팀원4 || 개발1팀 ||73점 || 홍길동 || G

팀장 || 팀장1 || 개발2팀 || 95점 ||홍길동 || G

팀장 || 팀장3 || 인사팀 || 78점 ||임꺽정 || G

팀원 || 팀원5 || 인사팀 || 81점 ||임꺽정 || G

계약직 || 팀원6 || 인사팀 || 65점 ||임꺽정 || G

 

팀원1 인 사람의 등급이 E 인 이유는 팀원인원수가 3명이고 제일 높은 점수인 사람이기때문에 E 이고 나머지 두명은 G 등급입니다

어떻게 접근을 해야할지 감이 잘 안옵니다

감사합니다.

by 우리집아찌 [2020.08.12 13:09:53]

평가 그룹의 단위는 무엇인가요?

같은부서의 팀원만 해당되나요?

팀장/계약직은 어떻게 처리하나요?


by Kaiger [2020.08.12 13:14:25]

평가 그룹의 단위는 무엇인가요?

-> 단위라고 하면 코드값을 말씀하시는건가요? 현재 그룹은 팀장,팀원,계약직만 있다고 보시면 됩니다

같은부서의 팀원만 해당되나요?

-> 부서 기준이 아닌 평가자 기준입니다. 1.평가자 2.평가그룹 

팀장/계약직은 어떻게 처리하나요?

-> 세 그룹 다 똑같은 방법으로 처리합니다

 

즉, 평가자 기준으로 부서에 상관없이 팀장이 2명이면 둘다 G 등급을 받고 3명이면 점수가 제일높은 사람이 E 등급이고 나머지 두명은 G 등급으로 처리합니다.

팀원,계약직도 같은 로직입니다.


by 우리집아찌 [2020.08.12 13:43:39]
WITH LIST ( GRP , NM , DEPT , PNT , TESTER_NM ) AS (
SELECT '팀장','팀장1','개발1팀','90점','홍길동' FROM DUAL UNION ALL
SELECT '팀원','팀원1','개발1팀','99점','홍길동' FROM DUAL UNION ALL
SELECT '팀원','팀원2','개발1팀','70점','홍길동' FROM DUAL UNION ALL
SELECT '팀원','팀원3','개발1팀','75점','홍길동' FROM DUAL UNION ALL
SELECT '계약직','팀원4','개발1팀','73점','홍길동' FROM DUAL UNION ALL
SELECT '팀장','팀장1','개발2팀','95점','홍길동' FROM DUAL UNION ALL
SELECT '팀장','팀장3','인사팀','78점','임꺽정' FROM DUAL UNION ALL
SELECT '팀원','팀원5','인사팀','81점','임꺽정' FROM DUAL UNION ALL
SELECT '계약직','팀원6','인사팀','65점','임꺽정' FROM DUAL 
) , GRD ( GRP , CNT , S ,E , G ) AS (
SELECT '팀장' , 1 , NULL , NULL , 1 FROM DUAL UNION ALL
SELECT '팀장' , 2 , NULL , NULL , 2 FROM DUAL UNION ALL
SELECT '팀장' , 3 , NULL , 1    , 2 FROM DUAL UNION ALL
SELECT '팀장' , 4 , NULL , 1    , 3 FROM DUAL UNION ALL
SELECT '팀장' , 5 , 1    , 1    , 3 FROM DUAL UNION ALL
SELECT '팀장' , 6 , 1    , 1    , 4 FROM DUAL UNION ALL
SELECT '팀장' , 7 , 1    , 1    , 5 FROM DUAL UNION ALL
SELECT '팀장' , 8 , 1    , 1    , 6 FROM DUAL UNION ALL
SELECT '팀장' , 9 , 1    , 1    , 7 FROM DUAL UNION ALL
SELECT '팀장' ,10 , 1    , 2    , 7 FROM DUAL UNION ALL
SELECT '팀장' ,11 , 1    , 2    , 8 FROM DUAL UNION ALL
SELECT '팀장' ,12 , 1    , 2    , 9 FROM DUAL UNION ALL
SELECT '팀장' ,13 , 1    , 2    , 10 FROM DUAL UNION ALL
SELECT '팀장' ,14 , 1    , 2    , 11 FROM DUAL 
)

 SELECT A.*
      , B.* 
      , CASE WHEN NVL(B.S,0)              >= A.GRD_RN  THEN 'S' 
             WHEN NVL(B.S,0) + NVL(B.E,0) >= A.GRD_RN  THEN 'E' 
             WHEN NVL(B.S,0) + NVL(B.E,0) + NVL(B.G,0) >= A.GRD_RN  THEN 'G' 
        END AS  GRD 
  FROM  (SELECT GRP 
              , NM 
              , DEPT 
              , PNT 
              , TESTER_NM 
              , ROW_NUMBER() OVER(PARTITION BY TESTER_NM , GRP ORDER BY PNT DESC ) GRD_RN 
              , COUNT(*) OVER(PARTITION BY TESTER_NM , GRP) TOT_CNT
          FROM LIST  ) A
        , GRD B
    WHERE A.TOT_CNT = B.CNT    

 


by Kaiger [2020.08.12 15:48:04]

정말 감사합니다!!! 좋은 하루 보내세요

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