[ORACLE]WMSYS.WM_CONCAT 월별데이터 합치기

Database 2018.04.06 09:17 Posted by 애플자라

SELECT 
    GROUP_NAME,
    WMSYS.WM_CONCAT(MARKETING_DATE_01) AS DATE_01,
    WMSYS.WM_CONCAT(MARKETING_DATE_02) AS DATE_02,
    WMSYS.WM_CONCAT(MARKETING_DATE_03) AS DATE_03,
    WMSYS.WM_CONCAT(MARKETING_DATE_04) AS DATE_04,
    WMSYS.WM_CONCAT(MARKETING_DATE_05) AS DATE_05,
    WMSYS.WM_CONCAT(MARKETING_DATE_06) AS DATE_06,
    WMSYS.WM_CONCAT(MARKETING_DATE_07) AS DATE_07,
    WMSYS.WM_CONCAT(MARKETING_DATE_08) AS DATE_08,
    WMSYS.WM_CONCAT(MARKETING_DATE_09) AS DATE_09,
    WMSYS.WM_CONCAT(MARKETING_DATE_10) AS DATE_10,
    WMSYS.WM_CONCAT(MARKETING_DATE_11) AS DATE_11,
    WMSYS.WM_CONCAT(MARKETING_DATE_12) AS DATE_12
FROM (SELECT GROUP_NAME,
       MARKETING_DATE,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '01' THEN MARKETING_DATE END MARKETING_DATE_01,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '02' THEN MARKETING_DATE END MARKETING_DATE_02,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '03' THEN MARKETING_DATE END MARKETING_DATE_03,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '04' THEN MARKETING_DATE END MARKETING_DATE_04,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '05' THEN MARKETING_DATE END MARKETING_DATE_05,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '06' THEN MARKETING_DATE END MARKETING_DATE_06,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '07' THEN MARKETING_DATE END MARKETING_DATE_07,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '08' THEN MARKETING_DATE END MARKETING_DATE_08,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '09' THEN MARKETING_DATE END MARKETING_DATE_09,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '10' THEN MARKETING_DATE END MARKETING_DATE_10,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '11' THEN MARKETING_DATE END MARKETING_DATE_11,
       CASE WHEN SUBSTR (MARKETING_DATE, 6, 2) = '12' THEN MARKETING_DATE END MARKETING_DATE_12,
       ROW_NUMBER () OVER (PARTITION BY GROUP_NAME ORDER BY MARKETING_DATE) RNUM
  FROM TB_MARKETING
 WHERE     SUBSTR (MARKETING_DATE, 0, 4) = '2018'
       --AND GROUP_NAME = '건설기술용역공제조합' 
     )
START WITH RNUM = 1
CONNECT BY PRIOR RNUM = RNUM - 1 AND PRIOR GROUP_NAME = GROUP_NAME
GROUP BY GROUP_NAME
ORDER BY GROUP_NAME ASC

 

출처 - http://blog.naver.com/PostView.nhn?blogId=jaejin1028&logNo=220793468335 

 

[ORACLE]그룹함수로 중복된 컬럼 제거하기

Database 2017.11.08 15:16 Posted by 애플자라

-- 2건이상 데이터
SELECT  MAX(ID) AS ID, MAX(TIMS_DATE) AS TIMS_DATE, MAX(FUND_CODE) AS FUND_CODE, COUNT(*) AS CNT
  FROM IFT_FUND_STANDARD_MODIFY
  WHERE FUND_CODE ='01032'
GROUP BY TIMS_DATE||FUND_CODE
HAVING COUNT(*) > 1

 

-- 2건이상 데이터중 과거 데이터 삭제
DELETE  -- SELECT꼭 해보고 날려버린다
FROM IFT_FUND_STANDARD_MODIFY
WHERE TIMS_DATE||FUND_CODE
IN
(
    SELECT TIMS_DATE||FUND_CODE
    FROM IFT_FUND_STANDARD_MODIFY
    WHERE FUND_CODE ='01032'
    GROUP BY TIMS_DATE||FUND_CODE
    HAVING COUNT(*) > 1
)
AND ID NOT IN (
SELECT  MAX(ID) as ID
  FROM IFT_FUND_STANDARD_MODIFY
  WHERE FUND_CODE ='01032'
GROUP BY TIMS_DATE||FUND_CODE
HAVING COUNT(*) > 1
)

 

CONCAT(TIMS_DATE,FUND_CODE) 도 가능

 

출처 - http://linguist79.tistory.com/49

[ORACLE]CLOB DATA Export Excel(DBMS_LOB.SUBSTR)

Database 2016.03.28 15:09 Posted by 애플자라

CLOB 데이터가 원하는데로 안나와서 일단 미련하게 추출; 


 SELECT 

   BOARD_SEQ,

         SEQ,

         TITLE,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 1)  AS CONTENTS1,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 2001)     AS CONTENTS2,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 4001)     AS CONTENTS3,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 6001)     AS CONTENTS4,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 8001)     AS CONTENTS5,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 10001)    AS CONTENTS6,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 12001)    AS CONTENTS7,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 14001)    AS CONTENTS8,

         DBMS_LOB.SUBSTR(CNTNT, 2000, 16001)    AS CONTENTS9

         --dbms_lob.getlength(CNTNT) -- 15801

    FROM TBD_BOARD

   WHERE BOARD_SEQ = '3'

ORDER BY SEQ DESC

[ORACLE]조인 결과로 테이블 UPDATE하기

Database 2014.10.29 16:54 Posted by 애플자라

UPDATE TB_MARKETING AA

SET (AGENCY_ID) = (SELECT AGENCY_ID FROM TEMP_GROUP B WHERE B.GROUP_NAME =AA.GROUP_NAME)

 

 

SELECT E.ID, E.SUBID, T.SUBID

UPDATE TB_MARKETING SET SUBID = T.SUBID

FROM TB_MARKETING E

INNER JOIN #TEMP_GROUP T ON ( E.SEQ = T.SEQ )

[ORACLE]FLASH BACK을 이용한 데이터복구

Database 2014.10.29 14:31 Posted by 애플자라

 

오라클을 이용하다면 보면 의도치 않게 데이터를 삭제하거나 변경을 하고 커밋을 해버리는 경우가 종종 발생하는데요.

이런 경우 데이터를 COMMIT을 한지 얼마 안 되었거나 메모리를 넉넉하게 잡아놓은 경우 FLASHBACK 기술을 이용해서 데이터 복원이 가능합니다.


1. 먼제 임시 테이블과 데이터를 생성합니다.






2. 데이터를 삭제하고 COMMIT을 합니다.




3. FLASHBACK에 데이터가 존재하는 확인합니다. 

본 포스팅에서 사용할 명령어는 AS OF TABLE 입니다. 자세히 기술하면 다음과 같습니다.


SELECT * FROM TEMP_TABLE

  AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '8' MINUTE); 여기에서 '8'은 몇분전에 데이터를 조회할지를 표시하는 것으로 본 포스팅에서 사용된 쿼리는 8번 데이터를 조회한다는 뜻입니다. 여기서 보여줄 수 있는 데이터의 인터벌은 시스템 설정 및 운영에 따라 달라질 수 있습니다.




   4. 데이터가 조회가 된다면 원래있던 테이블에 새롭게 INSERT 하는 방법 등으로 데이터를 복구 할 수 있습니다.

 

SELECT * FROM NEWYN_UPDATE_TRG01_LOG

AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '8' MINUTE)

SELECT * FROM LAW_OP_FUND
AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1575' MINUTE)

 

출처 - http://hothobbang.tistory.com/63

[ORACLE]Unique 번호를 남길때

Database 2014.10.02 10:40 Posted by 애플자라

SELECT

    ROW_NUMBER () OVER (ORDER BY NAME ASC) EMS_M_ID,

    NAME,

    EMAIL    

FROM

    테이블명

CREATE OR REPLACE TRIGGER APLUSORA.NEWYN_UPDATE_TRG01

 AFTER UPDATE OF CONFIRM5 ON APLUSORA.CUSTOMER

 FOR EACH ROW

 BEGIN

    if :NEW.CONFIRM5 = 'N' then -- CONFIRM5 ='N' 경우만

         UPDATE APLUSORA.NEWS_CUST

            SET NEWS_YN = 'N'

         WHERE  EMAIL = :NEW.EMAIL

         AND    NEWS_YN = 'Y';

         UPDATE APLUSORA.FAIR_CUSTOMER

            SET NEWS_YN = 'N'

         WHERE  FC_EMAIL = :NEW.EMAIL

         AND    NEWS_YN = 'Y';

         INSERT INTO NEWYN_UPDATE_TRG01_LOG (EMAIL, CONFIRM5, ACTION)

         VALUES(:NEW.EMAIL, :NEW.CONFIRM5, 'UPDATE');

    end if;

 END;

/

 

CREATE OR REPLACE TRIGGER APLUSORA.NEWYN_DELETE_TRG01

 AFTER DELETE ON APLUSORA.CUSTOMER

 FOR EACH ROW

 BEGIN

    UPDATE APLUSORA.NEWS_CUST

    SET NEWS_YN = 'N'

    WHERE  EMAIL = :OLD.EMAIL;

    UPDATE APLUSORA.FAIR_CUSTOMER

    SET NEWS_YN = 'N'

    WHERE  FC_EMAIL = :OLD.EMAIL;

    INSERT INTO NEWYN_UPDATE_TRG01_LOG (EMAIL, CONFIRM5, ACTION)

    VALUES(:OLD.EMAIL, :OLD.CONFIRM5, 'DELETE');

 END;

/

 

-- 사기꾼한테 피해를 입지 않게 트리거로그도 동시에 남김!

CREATE TABLE APLUSORA.NEWYN_UPDATE_TRG01_LOG

(

  EMAIL        VARCHAR2(50 BYTE),

  CONFIRM5     VARCHAR2(1 BYTE),

  ACTION       VARCHAR2(6 BYTE),

  REGISTER_DT  DATE DEFAULT SYSDATE

)

 

BEFORE : 데이터 처리가 실행되기 전

AFTER : 데이터 처리가 실행 된 후

FOR EACH ROW : 데이터 처리시 건건이 모두 트리거 실행

:OLD.컬럼명 : SQL 반영전의 컬럼 데이터

:NEW.컬럼명 : SQL 반영 후의 컬럼 데이터

 

* 한 컬럼 중복제거 후 이어 붙이기

 

SELECT LAW_ID,

       SUBSTR(XMLAGG(SYS.XMLTYPE.CREATEXML('<'||FLAG||'>,' || CONTRACT_GESTALT||'</'||FLAG||'>') ORDER BY CONTRACT_GESTALT).EXTRACT('/a1/text()'), 2) CONTRACT_GESTALT,

       SUBSTR(XMLAGG(SYS.XMLTYPE.CREATEXML('<'||FLAG||'>,' || MEMO1||'</'||FLAG||'>') ORDER BY MEMO1).EXTRACT('/a1/text()'), 2) MEMO1

 FROM (

       SELECT

           LAW_ID,

           CONTRACT_GESTALT,NVL2(CONTRACT_GESTALT, 'a' || ROW_NUMBER() OVER (PARTITION BY LAW_ID, CONTRACT_GESTALT ORDER BY CONTRACT_GESTALT),

           'a2')  AS FLAG,

           MEMO1,NVL2(MEMO1, 'a' || ROW_NUMBER() OVER (PARTITION BY LAW_ID, MEMO1 ORDER BY MEMO1),

           'a3')  AS FLAG1

       FROM LAW_OP_FUND)      

GROUP BY LAW_ID

 

* 중복제거 없이 이어 붙이기

 

SELECT 

    LAW_ID,

    SUBSTR (MAX (SYS_CONNECT_BY_PATH (CONTRACT_GESTALT, ',')), 2) CONTRACT_GESTALT

FROM (SELECT LAW_ID, CONTRACT_GESTALT,

       ROW_NUMBER () OVER (PARTITION BY LAW_ID ORDER BY CONTRACT_GESTALT) rnum

       FROM LAW_OP_FUND)

START WITH rnum = 1

CONNECT BY PRIOR rnum = rnum - 1 AND PRIOR LAW_ID = LAW_ID

GROUP BY LAW_ID

 

또는

 

SELECT

    LAW_ID,

    MAX(LTRIM(SYS_CONNECT_BY_PATH(CONTRACT_GESTALT,','),',')) AS CONTRACT_GESTALT

FROM

    (

    SELECT LAW_ID,CONTRACT_GESTALT,ROW_NUMBER() OVER(PARTITION BY LAW_ID ORDER BY ROWNUM) AS RN

    FROM LAW_OP_FUND T1

    --where LAW_ID ='2014091700002'

    )

START WITH RN = 1

CONNECT BY PRIOR LAW_ID = LAW_ID AND PRIOR RN = RN - 1

GROUP BY LAW_ID

ORDER BY LAW_ID ASC

 

출처 - http://amnesis.tistory.com/13

[ORACLE]날짜 함수 및 날짜구하기

Database 2014.09.18 13:01 Posted by 애플자라
---- 날자 계산하기 ----
 
-- 오늘날자 (현재날자 0시 0분 0초 ...)  
SELECT to_char(trunc(sysdate,'dd')    ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;                   
 
-- 내일날자 (다음날자 0시 0분 0초 ...)  
SELECT to_char(trunc(sysdate,'dd') + 1,'yyyy/mm/dd hh24:mi:ss') FROM dual ;                   
   
-- 내일날자 (다음날자 현재시 현재분 현재초 ...)  
SELECT to_char(sysdate + 1 ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;  
 
 
---- 달 계산하기 ----
 
-- 이번달 시작날자(현재달 1일 0시 0분 0초 ...)  
SELECT to_char(trunc(sysdate,'mm') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;                      
 
-- 이번달 시작날자(현재달 1일 현재시 현재분 현재초 ...)      
SELECT to_char(sysdate - TO_CHAR(SYSDATE, 'dd') + 1 ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;     
 
-- 다음달 시작날자(다음달 1일 0시 0분 0초 ...)  
SELECT to_char(trunc(add_months(sysdate, + 1),'mm') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;     
 
-- 다음달 시작날자(다음달 1일 현재시 현재분 현재초 ...)  
SELECT to_char(add_months(sysdate, 1) - to_char(add_months(sysdate, 1), 'dd') + 1,'yyyy/mm/dd hh24:mi:ss') FROM dual ;  
 
-- 다음달 오늘 날자(다음달 현재일 현재시 현재분 현재초 ...)  
SELECT to_char(add_months(sysdate, 1) ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;  
 
 
---- 년 계산하기 ----  
 
-- 올해 시작날자(올해 1월 1일 0시 0분 0초 ...)  
SELECT to_char(trunc(sysdate, 'yyyy') ,'yyyy/mm/dd hh24:mi:ss') FROM dual ;       
 
-- 1년전 현재일자(전년 현재달 현재일 0시 0분 0초 ...)  
SELECT to_char(trunc(add_months(sysdate, -12), 'dd'),'yyyy/mm/dd hh24:mi:ss') FROM dual ;      
 
-- 1년전 현재일자(전년 현재달 현재일 현재시 현재분 현재초 ...)  
SELECT to_char(add_months(sysdate, -12),'yyyy/mm/dd hh24:mi:ss') FROM dual ;   
 
 
---- 참고사항 ----  
 
-- TO_CHAR      : 숫자나 날짜를 문자열로 변환   
-- TO_NUMBER    : 문자를 숫자로 변환   
-- TO_DATE      : 문자를 날짜로 변환   
 
SELECT sysdate() -1 FROM dual;   -- 현재시간 - 1일  
SELECT sysdate() -1/24 FROM dual;  -- 현재시간 - 1시간   
SELECT sysdate() -1/24/60 FROM dual;  -- 현재시간 - 1분  
SELECT sysdate() -1/24/60/60 FROM dual;  -- 현재시간 - 1초  
 
-- YYYY     : 4자리 연도로 표시   
-- YY       : 끝의 2자리 연도로 표시  
-- YEAR     : 연도를 알파벳으로 표시  
-- MM       : 달을 숫자로 표시  
-- MON      : 달을 알파벳 약어 로표시  
-- MONTH    : 달을 알파벳으로 표시  
-- DD       : 일자를 숫자로 표시  
-- DAY      : 일에 해당하는 요일   
-- DY       : 일에 해당하는 요일의 약어   
-- HH       : 12시간으로 표시(1-12)  
-- HH24     : 24시간으로 표시(0-23)  
-- MI       : 분을 표시   
-- SS       : 초를 표시   
-- AM, PM   : 오전인지 오후인지를 표시  
 
 
---- 기초 날자구하기 ----  
 
-- SYSDATE          : 현재 시스템의 날짜 및 시간을 구함   
SELECT sysdate FROM dual;  
 
-- LAST_DAY         : 지정한 날짜의 해당 월의 마지막 날짜를 구함  
SELECT last_day(sysdate) FROM dual;  
 
-------------------------------------------------------------------------------  
-- 두 날자 사이의 차이 (1번째 인자가 2번째인자보다 작으면 음수, 크면 양수)  
-- 날자를 구할때 날자이후 데이터 까지 있다면 계산이 시간단위까지 계산하는듯하다  
-- 그래서 날자까지만 변환해서 잘라줘야 한다.  
 
SELECT to_date(to_char(to_date('20120220042517','yyyymmddhh24miss'), 'yyyymmdd'), 'yyyymmdd') - to_date(to_char(sysdate, 'yyyymmdd'), 'yyyymmdd') FROM dual;  
-------------------------------------------------------------------------------  
 
-- MONTHS_BETWEEN   : 두달 사이의 개월 차이 (1번째 인자가 2번째인자보다 작으면 음수, 크면 양수)  
SELECT MONTHS_BETWEEN(to_date('20120219','yyyymmdd'), sysdate) FROM dual;  
 
-- ADD_MONTHS       : 현재달로부터 지정한 달의 날자를 구함 (즉 1달뒤 2달뒤 등의 날자를 구함)  
SELECT add_months(sysdate, -3) FROM dual;  
 
-- ROUND            : 날짜에 대한 반올림 (12시이후(12:00 00초포함)면 1일을 더함)  
SELECT round(sysdate) FROM dual;  
SELECT round(to_date('20110221120000', 'yyyymmddhh24miss')) FROM dual;  
 
-- TRUNC : 날짜에 대한 버림   
SELECT trunc(sysdate) FROM dual;  
 
 
---- TO_CHAR 의 변환 형식들 ----  
 
-- 9    : 일반적인 숫자를 나타냄   
SELECT to_char('123', '999999') FROM dual;  
 
-- 0    : 앞의 빈자리를 0으로 채움   
SELECT to_char('123', '000000') FROM dual;  
 
-- $    : dollar를 표시함   
SELECT to_char('123', '$999999') FROM dual;  
 
-- L    : 지역 통화 단위(ex \)   
SELECT to_char('123', 'L999999') FROM dual;  
 
-- . : 소숫점을 표시함   
SELECT to_char('123', '999.999') FROM dual;  
SELECT to_char('12.3', '999.999') FROM dual;  
 
-- , : 천단위를 표시함   
SELECT to_char('12345', '999,999,999') FROM dual;

[ORACLE] 없는 데이터 강제로 만들기

Database 2014.09.16 11:58 Posted by 애플자라

없는 데이터 강제로 만들기 및 정해진 데이터 표로 리스트 뿌리기

미련하면서도 억지로 만든쿼리

 

SELECT * FROM
(
SELECT SUBSTR(MARKETING_DATE,0,7) AS DAYS, G_CATE, COUNT(G_CATE) AS CNT 
FROM TB_MARKETING   
WHERE SUBSTR(MARKETING_DATE,0,4) = SUBSTR(TO_CHAR(SYSDATE,'YYYYMMDD'),0,4) 
AND G_CATE IN  ('공제회','국가기관','생손보사','은행(중앙회)','금융기관','기타')  
GROUP BY SUBSTR(MARKETING_DATE,0,7),G_CATE
UNION ALL
SELECT DAYS,G_CATE,CNT FROM APLUS_V_TB_MARKETING_ANNUAL
)
ORDER BY DAYS DESC, DECODE(G_CATE,'국가기관',1,'공제회',2,'생손보사',3,'은행(중앙회)',4,'금융기관',5,'기타',6)

 

-----------------------------------------------

APLUS_V_TB_MARKETING_ANNUAL DDL

 

 

CREATE OR REPLACE FORCE VIEW APLUSORA.APLUS_V_TB_MARKETING_ANNUAL
(
   DAYS,
   G_CATE,
   CNT
)
AS
SELECT TO_CHAR(SYSDATE,'YYYY-MM') AS DAYS, '공제회' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(SYSDATE,'YYYY-MM') AND G_CATE = '공제회'
)
UNION ALL
SELECT TO_CHAR(SYSDATE,'YYYY-MM') AS DAYS, '국가기관' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(SYSDATE,'YYYY-MM') AND G_CATE = '국가기관'
)
UNION ALL
SELECT TO_CHAR(SYSDATE,'YYYY-MM') AS DAYS, '생손보사' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(SYSDATE,'YYYY-MM') AND G_CATE = '생손보사'
)
UNION ALL
SELECT TO_CHAR(SYSDATE,'YYYY-MM') AS DAYS, '은행(중앙회)' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(SYSDATE,'YYYY-MM') AND G_CATE = '은행(중앙회)'
)
UNION ALL
SELECT TO_CHAR(SYSDATE,'YYYY-MM') AS DAYS, '금융기관' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(SYSDATE,'YYYY-MM') AND G_CATE = '금융기관'
)
UNION ALL
SELECT TO_CHAR(SYSDATE,'YYYY-MM') AS DAYS, '기타' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(SYSDATE,'YYYY-MM') AND G_CATE = '기타'
)
UNION ALL
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AS DAYS, '공제회' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AND G_CATE = '공제회'
)
UNION ALL
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AS DAYS, '국가기관' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AND G_CATE = '국가기관'
)
UNION ALL
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AS DAYS, '생손보사' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AND G_CATE = '생손보사'
)
UNION ALL
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AS DAYS, '은행(중앙회)' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AND G_CATE = '은행(중앙회)'
)
UNION ALL
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AS DAYS, '금융기관' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AND G_CATE = '금융기관'
)
UNION ALL
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AS DAYS, '기타' AS G_CATE, 0 AS CNT FROM DUAL
WHERE 0 =
(
    SELECT COUNT(1) AS CNT FROM TB_MARKETING WHERE SUBSTR(MARKETING_DATE,0,7) = TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') AND G_CATE = '기타'
)

 

 

APLUS_V_TB_MARKETING_ANNUAL.SQL