본문 바로가기
정보관리(데이터베이스, DB)/오라클

보고서 sql 문

by 3604 2024. 8. 18.
728x90

직원 이름은 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z 이다.
부서 이름은 T-A, T-B,T-C 이다.
부서 팀은 가, 나, 다로 나뉜다.
직책 분류는 LV1, LV2, L3, L4, L5로 나뉜다.
T-A 부서의 직원은 a,b,c,d,e,f,g 이다.
T-A 부서의 YK팀은 a WK팀은 b,c,d SK팀은 e,f,g이다.
T-B 부서의 직원은 h,i,j,k,l,m,n,o,p,q,r 이다.
T-B 부서의 YK팀은은 h,i,j WK팀은 k,l,m,n SK팀은 o,p,q,r이다.
T-C 부서의 직원은 s,t,u,v,w,x,y,z 이다.
T-C 부서의 YK팀은 s,t WK팀은 u,v,w SK팀은x,y,z이다.
LV1은 a,b,c,d,e,f를 포함한다.
LV2은 g,h,i,j,k,l를 포함한다.
LV3은 m,n,o,p,q를 포함한다.
LV4은 r,s,t,u,v를 포함한다.
LV5은 w,x,y,z를 포함한다.
ORACLE SQL로 부서를 기준으로 팀을 분류하여 직책 행으로 표시해서 count하는 보고서 쿼리문을 작성한다.

쿼리문은 아래를 참조해서 작성한다
WITH employee_data AS (
  SELECT
    employee_name,
    department,
    CASE
      WHEN employee_name IN ('a', 'h', 's') THEN 'YK'
      WHEN employee_name IN ('b', 'c', 'd', 'k', 'l', 'm', 'n', 'u', 'v', 'w') THEN 'WK'
      WHEN employee_name IN ('e', 'f', 'g', 'o', 'p', 'q', 'r', 'x', 'y', 'z') THEN 'SK'
      ELSE '기타'
    END AS team,
    CASE
      WHEN employee_name IN ('a', 'b', 'c', 'd', 'e', 'f') THEN 'LV1'
      WHEN employee_name IN ('g', 'h', 'i', 'j', 'k', 'l') THEN 'LV2'
      WHEN employee_name IN ('m', 'n', 'o', 'p', 'q') THEN 'LV3'
      WHEN employee_name IN ('r', 's', 't', 'u', 'v') THEN 'LV4'
      WHEN employee_name IN ('w', 'x', 'y', 'z') THEN 'LV5'
    END AS level
  FROM EMPLOYEES
)
SELECT
  department,
  team,
  SUM(CASE WHEN level = 'LV1' THEN 1 ELSE 0 END) AS LV1_count,
  SUM(CASE WHEN level = 'LV2' THEN 1 ELSE 0 END) AS LV2_count,
  SUM(CASE WHEN level = 'LV3' THEN 1 ELSE 0 END) AS LV3_count,
  SUM(CASE WHEN level = 'LV4' THEN 1 ELSE 0 END) AS LV4_count,
  SUM(CASE WHEN level = 'LV5' THEN 1 ELSE 0 END) AS LV5_count
FROM employee_data
GROUP BY department, team
ORDER BY department, team;

728x90
반응형