데이터가 없으면 '데이터 없음 '으로 표시하는 쿼리 질문입니다. 0 1 783

by 성수다 [2021.06.16 10:44:56]


WITH temp AS
        (
            select YEAR
                   ,NTN_CD
                   ,MONTH
                   ,decode(NUM_OF_PERS,'0','자료없음',NUM_OF_PERS) v_amt 
                   ,to_char(PRVYY_VERSUS) v_rate 
                 FROM T_TOURIST_STATS
        )
        SELECT YEAR || '년' AS year
                 , NTN_CD
                 , max(case when month = '1' then v_amt ELSE '' end) NUM_OF_PERS_JAN
                 , round(max(case when month = '1' then v_rate END),3) *100 PRVYY_VERSUS_JAN
                 FROM temp
              group by YEAR, NTN_CD
              HAVING NTN_CD = 'CN'
              order by YEAR;

년도별 명수랑 퍼센트를 나타내주는 쿼리인데 데이터가 0이면 '자료없음' 이라고 표시해주고 싶은데 명수는 계산쿼리가 없어서 문자열로 출력이 가능한데

퍼센트경우 계산이 들어가서 문자열 출력이 잘 안되더라구요 어디 부분을 봐야 할까요?

CN    2004년    186246    0
CN    2005년    301458    61.9
CN    2006년    268689    -10.9
CN    2007년    410312    52.7
CN    2008년    426625    4
CN    2009년    238000    -44.2
CN    2010년    315200    32.4
CN    2011년    323200    2.5
CN    2012년    297800    -7.9
CN    2013년    322500    8.3
CN    2014년    294000    -8.8
CN    2015년    367700    25.1
CN    2016년    4775300    7.4
CN    2017년    3863800    -19.1
CN    2018년    4193500    8.5
CN    2019년    자료없음    0
CN    2020년    자료없음    0
CN    2021년    자료없음    0

by 마농 [2021.06.16 11:25:47]
SELECT ntn_cd
     , year || '년' year
     , MIN(DECODE(month,  1, v_amt))  num_of_pers_jan
     , MIN(DECODE(month,  1, v_rat)) prvyy_versus_jan
     , MIN(DECODE(month,  2, v_amt))  num_of_pers_feb
     , MIN(DECODE(month,  2, v_rat)) prvyy_versus_feb
     , MIN(DECODE(month,  3, v_amt))  num_of_pers_mar
     , MIN(DECODE(month,  3, v_rat)) prvyy_versus_mar
     , MIN(DECODE(month,  4, v_amt))  num_of_pers_apr
     , MIN(DECODE(month,  4, v_rat)) prvyy_versus_apr
     , MIN(DECODE(month,  5, v_amt))  num_of_pers_may
     , MIN(DECODE(month,  5, v_rat)) prvyy_versus_may
     , MIN(DECODE(month,  6, v_amt))  num_of_pers_jun
     , MIN(DECODE(month,  6, v_rat)) prvyy_versus_jun
     , MIN(DECODE(month,  7, v_amt))  num_of_pers_jul
     , MIN(DECODE(month,  7, v_rat)) prvyy_versus_jul
     , MIN(DECODE(month,  8, v_amt))  num_of_pers_aug
     , MIN(DECODE(month,  8, v_rat)) prvyy_versus_aug
     , MIN(DECODE(month,  9, v_amt))  num_of_pers_sep
     , MIN(DECODE(month,  9, v_rat)) prvyy_versus_sep
     , MIN(DECODE(month, 10, v_amt))  num_of_pers_oct
     , MIN(DECODE(month, 10, v_rat)) prvyy_versus_oct
     , MIN(DECODE(month, 11, v_amt))  num_of_pers_nov
     , MIN(DECODE(month, 11, v_rat)) prvyy_versus_nov
     , MIN(DECODE(month, 12, v_amt))  num_of_pers_dec
     , MIN(DECODE(month, 12, v_rat)) prvyy_versus_dec
  FROM (SELECT ntn_cd
             , year
             , month
             , DECODE(num_of_pers , 0, '자료없음', num_of_pers) v_amt
             , DECODE(prvyy_versus, 0, '자료없음', ROUND(prvyy_versus * 100, 1)) v_rat
          FROM t_tourist_stats
         WHERE ntn_cd = 'CN'
        )
 GROUP BY ntn_cd, year
 ORDER BY ntn_cd, year
;

 

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