각항목의 대한 합계를 1월~12월까지 각각월의 합계를
총기간은 3년동안의 기록을 모두 보여줘야 합니다.
ex)
2016 2017 2018
1 ~ 12 1 ~ 12 1 ~ 12
A
B
C
...
항목의 경우 대략 130개정도 됩니다.
@TE_MNG_MOK_NM 항목
@PAY_CMD_YMD 날짜
@EXPD_RESOL_AMT 금액
SELECT IF(TE_MNG_MOK_NM = 'A' AND DATE_FORMAT(PAY_CMD_YMD, '%Y-%m-%d') BETWEEN '2016-03-01 00:00:00' AND '2016-03-31 23:59:59', SUM(IFNULL(EXPD_RESOL_AMT,0)), 0) AS T, IF(TE_MNG_MOK_NM = 'B' AND DATE_FORMAT(PAY_CMD_YMD, '%Y-%m-%d') BETWEEN '2017-03-01 00:00:00' AND '2017-03-31 23:59:59', SUM(EXPD_RESOL_AMT), 0) AS A FROM V_FIOS_TCM_TEMNGMOKEXPDDESC WHERE DATE_FORMAT(PAY_CMD_YMD, '%Y-%m-%d') BETWEEN '2016-01-01 00:00:00' AND '2018-12-31 23:59:59';
위와 같은 쿼리로 했을 경우
IF문으로 각항목에 대해
2016 1월~12월
2017 1월~12월
2018 1월~12월
모두 써줘야 하는 걸까요;;
그러기엔 쿼리문이 너무나도 길어져서...
그리고 위의 코드로 테스트 해보았는데
분명 항목이 A이며 해당 날짜 사이에 포함되어 데이터 SUM합계를 출력해보았는데
0으로 출력이 되어 버리네요 ㅜㅜ
이러한 상황에서는 쿼리문을 어떻게 수정해야 될까요?
SELECT te_mng_mok_nm , IFNULL(SUM(CASE ym WHEN '2016-01' THEN amt END), 0) "2016-01" , IFNULL(SUM(CASE ym WHEN '2016-02' THEN amt END), 0) "2016-02" , IFNULL(SUM(CASE ym WHEN '2016-03' THEN amt END), 0) "2016-03" , IFNULL(SUM(CASE ym WHEN '2016-04' THEN amt END), 0) "2016-04" , IFNULL(SUM(CASE ym WHEN '2016-05' THEN amt END), 0) "2016-05" , IFNULL(SUM(CASE ym WHEN '2016-06' THEN amt END), 0) "2016-06" , IFNULL(SUM(CASE ym WHEN '2016-07' THEN amt END), 0) "2016-07" , IFNULL(SUM(CASE ym WHEN '2016-08' THEN amt END), 0) "2016-08" , IFNULL(SUM(CASE ym WHEN '2016-09' THEN amt END), 0) "2016-09" , IFNULL(SUM(CASE ym WHEN '2016-10' THEN amt END), 0) "2016-10" , IFNULL(SUM(CASE ym WHEN '2016-11' THEN amt END), 0) "2016-11" , IFNULL(SUM(CASE ym WHEN '2016-12' THEN amt END), 0) "2016-12" , IFNULL(SUM(CASE ym WHEN '2017-01' THEN amt END), 0) "2017-01" , IFNULL(SUM(CASE ym WHEN '2017-02' THEN amt END), 0) "2017-02" , IFNULL(SUM(CASE ym WHEN '2017-03' THEN amt END), 0) "2017-03" , IFNULL(SUM(CASE ym WHEN '2017-04' THEN amt END), 0) "2017-04" , IFNULL(SUM(CASE ym WHEN '2017-05' THEN amt END), 0) "2017-05" , IFNULL(SUM(CASE ym WHEN '2017-06' THEN amt END), 0) "2017-06" , IFNULL(SUM(CASE ym WHEN '2017-07' THEN amt END), 0) "2017-07" , IFNULL(SUM(CASE ym WHEN '2017-08' THEN amt END), 0) "2017-08" , IFNULL(SUM(CASE ym WHEN '2017-09' THEN amt END), 0) "2017-09" , IFNULL(SUM(CASE ym WHEN '2017-10' THEN amt END), 0) "2017-10" , IFNULL(SUM(CASE ym WHEN '2017-11' THEN amt END), 0) "2017-11" , IFNULL(SUM(CASE ym WHEN '2017-12' THEN amt END), 0) "2017-12" , IFNULL(SUM(CASE ym WHEN '2018-01' THEN amt END), 0) "2018-01" , IFNULL(SUM(CASE ym WHEN '2018-02' THEN amt END), 0) "2018-02" , IFNULL(SUM(CASE ym WHEN '2018-03' THEN amt END), 0) "2018-03" , IFNULL(SUM(CASE ym WHEN '2018-04' THEN amt END), 0) "2018-04" , IFNULL(SUM(CASE ym WHEN '2018-05' THEN amt END), 0) "2018-05" , IFNULL(SUM(CASE ym WHEN '2018-06' THEN amt END), 0) "2018-06" , IFNULL(SUM(CASE ym WHEN '2018-07' THEN amt END), 0) "2018-07" , IFNULL(SUM(CASE ym WHEN '2018-08' THEN amt END), 0) "2018-08" , IFNULL(SUM(CASE ym WHEN '2018-09' THEN amt END), 0) "2018-09" , IFNULL(SUM(CASE ym WHEN '2018-10' THEN amt END), 0) "2018-10" , IFNULL(SUM(CASE ym WHEN '2018-11' THEN amt END), 0) "2018-11" , IFNULL(SUM(CASE ym WHEN '2018-12' THEN amt END), 0) "2018-12" FROM (SELECT te_mng_mok_nm , DATE_FORMAT(pay_cmd_ymd, '%Y-%m') AS ym , expd_resol_amt AS amt FROM v_fios_tcm_temngmokexpddesc WHERE pay_cmd_ymd >= DATE_ADD('2016-01-01', INTERVAL 0 DAY) AND pay_cmd_ymd < DATE_ADD('2018-12-31', INTERVAL 1 DAY) ) a GROUP BY te_mng_mok_nm ;