반복문을 이용하여 각 월별 집계데이터를 한꺼번에 검색할 수 있는 프로시저 작성 관련 질문 0 2 1,516

by TryCatch [PL/SQL] plsql union all loop for [2022.06.08 09:57:01]


안녕하세요

데이터베이스 공부하는 초보인데요 

PLSQL 작성하다가 궁금한 부분이 있어서 질문드립니다.

1) 특정 월(ex202101)에서 현재월(sysdate기준)까지 매월 데이터를 조회해서
2) 월별 집계데이터를 uinon all 하여 조회된 데이터를 한꺼번에 검색

loop 등 반문복을 이용해서 쉽게 구현하고 싶은데, 잘 안되네요

방법을 알고계신 고수분들 조언 부탁드리겠습니다~~


CREATE OR REPLACE PROCEDURE GET_SHOP_DATA
(
	RESULT OUT SYS_REFCURSOR
)
IS

BEGEN  

  OPEN  RESULT FOR
    SELECT '202101' AS YYYYMM
            ,SHOP AS  SHOP            
            ,COUNT(*) AS CNT
    FROM  MYDATA
    WHERE '202101'  BETWEEN WORKSTART AND  WORKEND
    GROUP BY SHOP
    
    UNION ALL 

    SELECT '202102' AS YYYYMM
          ,SHOP AS  SHOP            
          ,COUNT(*) AS CNT
    FROM MYDATA
    WHERE '202102'  BETWEEN WORKSTART AND  WORKEND
    GROUP BY SHOP;
	
	UNION ALL 
	 
	SELECT '202103' AS YYYYMM
          ,SHOP AS  SHOP            
          ,COUNT(*) AS CNT
    FROM MYDATA
    WHERE '202103'  BETWEEN WORKSTART AND  WORKEND
    GROUP BY SHOP;
	
	-- 현재 월 까지 UNION ALL --

END	

 

by 마농 [2022.06.08 10:24:03]
WITH ym AS
(
SELECT TO_CHAR(ADD_MONTHS(dt, LEVEL - 1), 'yyyymm') yyyymm
  FROM (SELECT TO_DATE('202101', 'yyyymm') dt FROM dual)
 CONNECT BY LEVEL <= MONTHS_BETWEEN(TRUNC(sysdate, 'mm'), dt) + 1
)
SELECT a.yyyymm
     , b.shop
     , COUNT(*) cnt
  FROM ym a
     , mydata b
 WHERE a.yyyymm BETWEEN b.workstart AND b.workend
 GROUP BY a.yyyymm, b.shop
 ORDER BY a.yyyymm, b.shop
;

 


by TryCatch [2022.06.08 11:44:16]

굳이 프로시저로 하지 않아도 쿼리로 해결할 수 있는 문제 였군요

조언 너무 감사 드립니다

갈길이 머네요 ㅠ

 

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