총 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;
-- 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 ;