출력해야될 항목이 많을 경우에는 어떻게 해야될까요? 0 4 803

by 정수리형 [2019.05.27 10:22:53]


각항목의 대한 합계를 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으로 출력이 되어 버리네요 ㅜㅜ

 

이러한 상황에서는 쿼리문을 어떻게 수정해야 될까요?

 

 

by 마농 [2019.05.27 10:50:30]

1. 필요한 항목만큼 각각 적어줘야 합니다.
- 다만 한줄에 모든걸 표현하는게 맞는지 의문이네요?
- 보통 격자형태로 표현하지 않나요?
2. 또한 반복되는 표현식들은 인라인뷰 안에서 한번만 사용하여 알리아스 주고
- 인라인뷰 밖에서는 간략하게 알리아스만 사용하면 되구요.
3. 조건도 좀 안맞는 부분도 보이고 - 일자까지만 가져와 시간조건과 비교하는 부분
4. SUM 사용법도 틀렸네요. IF(SUM) --> SUM(IF)
5. 조건 줄 때 컬럼을 가공하여 조건에 맞추기 보다는
- 컬럼은 그대로 둔 채 조건을 가공하여 컬럼에 맞추세요


by 정수리형 [2019.05.27 10:58:04]

감사합니다.

말씀해주신 부분 중에 sum함수 사용의 경우 수정 하였습니다.

 

제가 아직 실력이 많이 부족하다보니 말씀해주신 답변 중에 이해하지 못한 부분들이 있네요 ㅜㅜ

일단 화면에 출력하는 데이터의경우 격자형태로 출려합니다.

화면에 출력하는 형태가

 

                2016                              2017                               2018

     1  2 3 4 5 6 7 8 9 10 11 12    1  2 3 4 5 6 7 8 9 10 11 12    1  2 3 4 5 6 7 8 9 10 11 12

A

B

C

D

....

위와 같은 형태의 데이터를 출력해주어야 합니다,

 


by 마농 [2019.05.27 11:00:54]
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
;

 


by 정수리형 [2019.05.27 11:19:22]

답변 감사합니다.

 

공통적인 부분은 인라인뷰를 사용하라고 하셔서

 

검색을 통해 찾아 보면서 어떤형태로 써야 할지 고민하고 있었는데

 

올려주신 쿼리를 보니 전보다 많은 방법을 알게 되었습니다. 정말 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입