SQL

연도별 월별 데이터 count 조회 select문 쿼리

hhana 2023. 8. 2. 21:57

* T2.REG_YMD는 string타입 데이터로 맨앞 네글자는 연도, 그 다음 두글자는 월을 나타냄
* 연도별 각 월에 해당하는 해당 부서 월 입사자의 수를 count

SELECT
    SUBSTR(T2.REG_YMD, 1, 4) AS YEAR,
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '01' AND T1.DEPT_CD = '1' THEN 1 ELSE 0 END) AS ES01,
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '02' AND T1.DEPT_CD = '1' THEN 1 ELSE 0 END) AS ES02,
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '03' AND T1.DEPT_CD = '1' THEN 1 ELSE 0 END) AS ES03,
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '04' AND T1.DEPT_CD = '1' THEN 1 ELSE 0 END) AS ES04,
    ...
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '12' AND T1.DEPT_CD = '1' THEN 1 ELSE 0 END) AS ES12,
    COUNT(CASE WHEN T1.DEPT_CD = '1' THEN 1 ELSE NULL END) AS ES_ALL,
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '01' AND T1.DEPT_CD = '2' THEN 1 ELSE 0 END) AS SS01,
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '02' AND T1.DEPT_CD = '2' THEN 1 ELSE 0 END) AS SS02,
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '03' AND T1.DEPT_CD = '2' THEN 1 ELSE 0 END) AS SS03,
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '04' AND T1.DEPT_CD = '2' THEN 1 ELSE 0 END) AS SS04,
    ...
    SUM(CASE WHEN SUBSTR(T2.REG_YMD, 5, 2) = '12' AND T1.DEPT_CD = '2' THEN 1 ELSE 0 END) AS SS12,
    COUNT(CASE WHEN T1.DEPT_CD = '2' THEN 1 ELSE NULL END) AS SS_ALL
FROM
	TB_EMP T2
JOIN
	TB_DEPT T1
ON
	T1.COMP_CD = T2.COMP_CD
WHERE
    T1.DEPT_CD IN ('1', '2')
GROUP BY
    SUBSTR(T2.REG_YMD, 1, 4)
ORDER BY
    T2.REG_YMD DESC

 

이런 식으로 조회 가능