하나만 더 문의 드립니다! 0 3 511

by 와니와플 [2021.02.06 11:34:21]


총 100개를 한번에 짜려니.. 생각의 질서가 정리가 안되네요 ㅠ 제일 문제가 될 것 같은 쿼리 2개를 문의 드렸습니다!

/* 1 - 2) 성별 세대별 소비매출현황 (필터(4) = YEAR, MONTH, SGG, HD)   */

/* *** (참고)GN_SEXAGE 테이블의 경우 2020.11월 데이터 'AGE_CD'에 넘버링이 되어있어 일괄 통일되도록 추후 수정될 예정입니다.   */

set @SGG = 0 #시군구 미선택시 0 (지도클릭)

set @HD = 0 #행정동 미선택시 0 (지도클릭)

set @M = 0 #전체 선택시 0

 

SELECT

    N.SEX_CD,

    N.AGE_CD,

    SUM(N.AMT_N) AS 'SALE_AMT',

    CONCAT(ROUND(((SUM(N.AMT_N) - SUM(N.AMT_O)) / SUM(N.AMT_O) * 100), 1), '%') AS '매출액증감'

FROM

    (

        SELECT

            CASE

                    WHEN @M != 0 AND LEFT(TA_D,6) = '201901' THEN AMT #CONCAT(YEAR,@M)

                                WHEN @M = 0 AND LEFT(TA_D,4) = '2019' THEN AMT #YEAR

                    ELSE 'NONE'

            END

        AS 'AMT_N',

            CASE

                    WHEN @M != 0 AND LEFT(TA_D,6) = '201801' THEN AMT #CONCAT(YEAR-1,@M)

                                WHEN @M = 0 AND LEFT(TA_D,4) = '2018' THEN AMT #YEAR-1

                    ELSE 'NONE'

            END

        AS 'AMT_O',

    SEX_CD,

    AGE_CD,

    TA_D

FROM

    GN_SEXAGE

WHERE

    CASE

        WHEN @HD != 0 THEN HD_CD = @HD

        WHEN @SGG != 0 THEN LEFT(HD_CD,5) = @SGG

        ELSE 1

    END)N

GROUP BY

    N.SEX_CD,

    N.AGE_CD;

by 마농 [2021.02.06 13:34:04]

변수가 문자형 아닌가요? 숫자인 0 과 비교하네요?
실제로 숫자 0 이 들어 오나요? 문자 '00', '00000' 형태로 들어오는 것은 아닌지?
hd_cd 가 아마도 sgg 5자리 + hd 5자리 인듯 한데요?
HD_CD = @HD 는 조건 잘못 준거죠? (10자리 = 5자리 ?)


by 와니와플 [2021.02.06 13:52:42]

실제로 숫자가 0인 것은 없습니다! 처음 셋업을 0으로 주면 무조건 0으로 비교 하지요? 아무래도 제가 실수한 것 같습니다.


by 마농 [2021.02.06 13:59:28]
-- MySQL --
SELECT sex_cd
     , age_cd
     , SUM(CASE LEFT(ta_d, 4) WHEN @YEAR   THEN amt END) amt_n
     , SUM(CASE LEFT(ta_d, 4) WHEN @YEAR-1 THEN amt END) amt_o
     , CONCAT(ROUND
       ( SUM(CASE LEFT(ta_d, 4) WHEN @YEAR   THEN amt END)
       / SUM(CASE LEFT(ta_d, 4) WHEN @YEAR-1 THEN amt END)
       * 100 - 100, 1), '%') 매출액증감
  FROM gn_sexage
 WHERE 1=1
   AND ta_d >= CONCAT(@YEAR-1, '0101')
   AND ta_d <= CONCAT(@YEAR  , '1231')
   AND (@MONTH = 0 OR (@MONTH != 0 AND SUBSTR(ta_d, 5, 2) = @MONTH)
   AND (@HD    = 0 OR (@HD    != 0 AND hd_cd              = @HD)
   AND (@SGG   = 0 OR (@SGG   != 0 AND LEFT(hd_cd, 5)     = @SGG)
 GROUP BY sex_cd, age_cd
;

 

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