아래와 같이 SQL을 짰는데 FOR문에 반복되는 항목들을 넣어도 코드가 너무 길고 유지보수하기 힘들것같아서 질문드립니다. 혹시 아래같은 방법 말고 1일부터 월말까지 일자별 매출을 표시할 수 있는 방법이 있을까요? 아이디어가 떠오르지 않네요 ㅜㅜ.. WITH SHOP_DATA AS (SELECT INFO.DIVISION_CD, INFO.CLIENT_CD, MAX(INFO.CLIENTNICKNAME) CLIENTNICKNAME, MAX(INFO.shoptype) shoptype, MAX(INFO.shop_level) shop_level, MAX(INFO.client_owner) client_owner, MAX(INFO.user_cd) user_cd, MAX(INFO.cg_cd) cg_cd, MAX(INFO.shop_area) shop_area, Max(VIEW_shoptype_Name.CodeName) shoptype_Name, Max(VIEW_shop_level_Name.CodeName) shop_level_Name, Max(VIEW_user_cd_Name.CodeName) user_cd_Name, Max(VIEW_cg_Name.CodeName) cg_Name, Max(VIEW_shop_area_Name.CodeName) shop_area_Name FROM (SELECT DIVISION_CD, GU, CODE, CODENAME FROM COMM_CODE WHERE GU = 'SHTYP') VIEW_shoptype_Name, (SELECT DIVISION_CD, GU, CODE, CODENAME FROM COMM_CODE WHERE GU = 'SHOPL') VIEW_shop_level_Name, (SELECT INFO.DIVISION_CD DIVISION_CD, INFO.User_cd CODE, MAX(USER_NAME.NAME) CODENAME FROM COMM_CLIENTINFO INFO, comm_user USER_NAME WHERE INFO.User_cd IS NOT NULL AND INFO.client_gu = 'M' AND USER_NAME.DIVISION_CD(+) = INFO.DIVISION_CD AND USER_NAME.USER_CD(+) = INFO.User_cd GROUP BY INFO.DIVISION_CD, INFO.User_cd) VIEW_user_cd_Name, (SELECT DIVISION_CD DIVISION_CD, CLIENT_CD CODE, CLIENTNICKNAME CODENAME FROM COMM_CLIENTINFO WHERE CLIENT_GU = 'M') VIEW_cg_Name, (SELECT DIVISION_CD, GU, CODE, CODENAME FROM COMM_CODE WHERE GU = 'SHOPA') VIEW_shop_area_Name, COMM_CLIENTINFO INFO WHERE INFO.DIVISION_CD = '0' AND INFO.CLIENT_GU = 'M' AND VIEW_shoptype_Name.DIVISION_CD(+) = INFO.DIVISION_CD AND VIEW_shoptype_Name .CODE(+) = INFO.shoptype AND VIEW_shop_level_Name.DIVISION_CD(+) = INFO.DIVISION_CD AND VIEW_shop_level_Name.CODE(+) = INFO.shop_level AND VIEW_user_cd_Name.DIVISION_CD(+) = INFO.DIVISION_CD AND VIEW_user_cd_Name.CODE(+) = INFO.user_cd AND VIEW_cg_Name.DIVISION_CD(+) = INFO.DIVISION_CD AND VIEW_cg_Name.CODE(+) = INFO.cg_cd AND VIEW_shop_area_Name.DIVISION_CD(+) = INFO.DIVISION_CD AND VIEW_shop_area_Name.CODE(+) = INFO.shop_area GROUP BY INFO.DIVISION_CD, INFO.CLIENT_CD) SELECT A.SHOP_CD, A.SHOP_NAME, SUM(DAY_01 + DAY_02 + DAY_03 + DAY_04 + DAY_05 + DAY_06 + DAY_07 + DAY_08 + DAY_09 + DAY_10 + DAY_11 + DAY_12 + DAY_13 + DAY_14 + DAY_15 + DAY_16 + DAY_17 + DAY_18 + DAY_19 + DAY_20 + DAY_21 + DAY_22 + DAY_23 + DAY_24 + DAY_25 + DAY_26 + DAY_27 + DAY_28 + DAY_29 + DAY_30 + DAY_31) TOT, SUM(DAY_01) DAY_01, SUM(DAY_02) DAY_02, SUM(DAY_03) DAY_03, SUM(DAY_04) DAY_04, SUM(DAY_05) DAY_05, SUM(DAY_06) DAY_06, SUM(DAY_07) DAY_07, SUM(DAY_08) DAY_08, SUM(DAY_09) DAY_09, SUM(DAY_10) DAY_10, SUM(DAY_11) DAY_11, SUM(DAY_12) DAY_12, SUM(DAY_13) DAY_13, SUM(DAY_14) DAY_14, SUM(DAY_15) DAY_15, SUM(DAY_16) DAY_16, SUM(DAY_17) DAY_17, SUM(DAY_18) DAY_18, SUM(DAY_19) DAY_19, SUM(DAY_20) DAY_20, SUM(DAY_21) DAY_21, SUM(DAY_22) DAY_22, SUM(DAY_23) DAY_23, SUM(DAY_24) DAY_24, SUM(DAY_25) DAY_25, SUM(DAY_26) DAY_26, SUM(DAY_27) DAY_27, SUM(DAY_28) DAY_28, SUM(DAY_29) DAY_29, SUM(DAY_30) DAY_30, SUM(DAY_31) DAY_31 FROM (SELECT A.SHOP_CD SHOP_CD, B.CLIENTNICKNAME SHOP_NAME, 0 TOT, SUM(A.AMT) DAY_01, 0 DAY_02, 0 DAY_03, 0 DAY_04, 0 DAY_05, 0 DAY_06, 0 DAY_07, 0 DAY_08, 0 DAY_09, 0 DAY_10, 0 DAY_11, 0 DAY_12, 0 DAY_13, 0 DAY_14, 0 DAY_15, 0 DAY_16, 0 DAY_17, 0 DAY_18, 0 DAY_19, 0 DAY_20, 0 DAY_21, 0 DAY_22, 0 DAY_23, 0 DAY_24, 0 DAY_25, 0 DAY_26, 0 DAY_27, 0 DAY_28, 0 DAY_29, 0 DAY_30, 0 DAY_31 FROM ONLINE_AMT A, SHOP_DATA B WHERE A.DIVISION_CD = '0' AND A.SHOP_CD = B.CLIENT_CD AND A.SALE_DT = 20210101 GROUP BY A.SHOP_CD, B.CLIENTNICKNAME UNION ALL SELECT A.SHOP_CD SHOP_CD, B.CLIENTNICKNAME SHOP_NAME, 0 TOT, 0 DAY_01, SUM(A.AMT) DAY_02, 0 DAY_03, 0 DAY_04, 0 DAY_05, 0 DAY_06, 0 DAY_07, 0 DAY_08, 0 DAY_09, 0 DAY_10, 0 DAY_11, 0 DAY_12, 0 DAY_13, 0 DAY_14, 0 DAY_15, 0 DAY_16, 0 DAY_17, 0 DAY_18, 0 DAY_19, 0 DAY_20, 0 DAY_21, 0 DAY_22, 0 DAY_23, 0 DAY_24, 0 DAY_25, 0 DAY_26, 0 DAY_27, 0 DAY_28, 0 DAY_29, 0 DAY_30, 0 DAY_31 FROM ONLINE_AMT A, SHOP_DATA B WHERE A.DIVISION_CD = '0' AND A.SHOP_CD = B.CLIENT_CD AND A.SALE_DT = 20210102 GROUP BY A.SHOP_CD, B.CLIENTNICKNAME UNION ALL ... 31일까지 반복
SELECT shop_cd , shop_name , SUM(amt) tot , NVL(SUM(DECODE(dd, '01', amt)), 0) day_01 , NVL(SUM(DECODE(dd, '02', amt)), 0) day_02 , NVL(SUM(DECODE(dd, '03', amt)), 0) day_03 , NVL(SUM(DECODE(dd, '04', amt)), 0) day_04 , NVL(SUM(DECODE(dd, '05', amt)), 0) day_05 , NVL(SUM(DECODE(dd, '06', amt)), 0) day_06 , NVL(SUM(DECODE(dd, '07', amt)), 0) day_07 , NVL(SUM(DECODE(dd, '08', amt)), 0) day_08 , NVL(SUM(DECODE(dd, '09', amt)), 0) day_09 , NVL(SUM(DECODE(dd, '10', amt)), 0) day_10 , NVL(SUM(DECODE(dd, '11', amt)), 0) day_11 , NVL(SUM(DECODE(dd, '12', amt)), 0) day_12 , NVL(SUM(DECODE(dd, '13', amt)), 0) day_13 , NVL(SUM(DECODE(dd, '14', amt)), 0) day_14 , NVL(SUM(DECODE(dd, '15', amt)), 0) day_15 , NVL(SUM(DECODE(dd, '16', amt)), 0) day_16 , NVL(SUM(DECODE(dd, '17', amt)), 0) day_17 , NVL(SUM(DECODE(dd, '18', amt)), 0) day_18 , NVL(SUM(DECODE(dd, '19', amt)), 0) day_19 , NVL(SUM(DECODE(dd, '20', amt)), 0) day_20 , NVL(SUM(DECODE(dd, '21', amt)), 0) day_21 , NVL(SUM(DECODE(dd, '22', amt)), 0) day_22 , NVL(SUM(DECODE(dd, '23', amt)), 0) day_23 , NVL(SUM(DECODE(dd, '24', amt)), 0) day_24 , NVL(SUM(DECODE(dd, '25', amt)), 0) day_25 , NVL(SUM(DECODE(dd, '26', amt)), 0) day_26 , NVL(SUM(DECODE(dd, '27', amt)), 0) day_27 , NVL(SUM(DECODE(dd, '28', amt)), 0) day_28 , NVL(SUM(DECODE(dd, '29', amt)), 0) day_29 , NVL(SUM(DECODE(dd, '30', amt)), 0) day_30 , NVL(SUM(DECODE(dd, '31', amt)), 0) day_31 FROM (SELECT a.shop_cd , b.clientnickname shop_name , SUBSTR(a.sale_dt, 7, 2) dd , a.amt FROM online_amt a , shop_data b WHERE a.division_cd = '0' AND a.shop_cd = b.client_cd AND a.sale_dt BETWEEN '20210101' AND '20210131' ) GROUP BY shop_cd, shop_name ;
-- comm_clientinfo 직접 조인 -- SELECT shop_cd , shop_name , SUM(amt) tot , NVL(SUM(DECODE(dd, '01', amt)), 0) day_01 -- 중략 -- , NVL(SUM(DECODE(dd, '31', amt)), 0) day_31 FROM (SELECT a.shop_cd , b.clientnickname shop_name , SUBSTR(a.sale_dt, 7, 2) dd , a.amt FROM online_amt a , comm_clientinfo b WHERE a.division_cd = b.division_cd AND a.shop_cd = b.client_cd AND b.division_cd = '0' AND b.client_gu = 'M' AND a.sale_dt BETWEEN '20210101' AND '20210131' ) GROUP BY shop_cd, shop_name ;