각항목의 대한 합계를 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 금액
1 2 3 4 5 6 | 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으로 출력이 되어 버리네요 ㅜㅜ
이러한 상황에서는 쿼리문을 어떻게 수정해야 될까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 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 ; |