직원 이름은 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;
'정보관리(데이터베이스, DB) > 오라클' 카테고리의 다른 글
[Oracle] TRUNCATE, DELETE, DROP 차이, 테이블 데이터 삭제 (1) | 2024.09.04 |
---|---|
서브쿼리 Push에 대해 알아보자 (0) | 2024.09.03 |
간단하게 컬럼 순서 변경하기(VISIBLE 사용X) (0) | 2024.08.18 |
백업을 위한 스냅샷 (1) | 2024.06.11 |
오라클 DB 백업 및 복구 (Oracle DB Backup & Restoration) (1) | 2024.06.08 |