안녕하세요
평가그룹별, 평가자별 등급을 가져오려고 합니다
평가그룹은 팀장,팀원,계약직
데이터는 이렇습니다
평가그룹 || 성명 || 부서 || 점수 ||평가자
팀장 || 팀장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 등급입니다
어떻게 접근을 해야할지 감이 잘 안옵니다
감사합니다.
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