오라클 분기 구하기 질문입니다. 0 3 698

by 고래 [2021.12.05 13:32:11]


안녕하세요.

 

오라클 분기 구하려고 하는데요..

 

예를 들어

2021-12-05 또는 2021-12-01 를 입력하면

 

2021-10

2021-11

2021-12 

와 같은 3row 데이터 출력을 원합니다.

 

아니면 1분기인

2021-02-08 데이터를 입력하면

 

2021-01

2021-02

2021-03 

이렇게 3개의 row 데이터 출력을 원하는데 어떻게 해야 할까요.. ㅠㅠ

 

가능하면 오라클에 CONNECT BY LEVEL문법을 사용하여 구하고자 하는데.. 분기는 못 구하고 있습니다..

 

선배님들 도와주세요

 

 

by pajama [2021.12.05 22:42:11]

trunc 후 connect by 사용해봤습니다.

select add_months ( trunc (sysdate, 'Q') , level - 1 ) from dual connect by level < 4


by 꼬랑지 [2021.12.06 09:38:50]

달은 12개이고 분기는 4개 고정이니 기준테이블을 만들어서 사용하면 되겠네요

 

WITH A AS (
SELECT TO_DATE('20210403','YYYYMMDD') COLA FROM DUAL
) , B AS (
SELECT '01' COLA, '1' COLB FROM DUAL UNION ALL
SELECT '02' COLA, '1' COLB FROM DUAL UNION ALL
SELECT '03' COLA, '1' COLB FROM DUAL UNION ALL
SELECT '04' COLA, '2' COLB FROM DUAL UNION ALL
SELECT '05' COLA, '2' COLB FROM DUAL UNION ALL
SELECT '06' COLA, '2' COLB FROM DUAL UNION ALL
SELECT '07' COLA, '3' COLB FROM DUAL UNION ALL
SELECT '08' COLA, '3' COLB FROM DUAL UNION ALL
SELECT '09' COLA, '3' COLB FROM DUAL UNION ALL
SELECT '10' COLA, '4' COLB FROM DUAL UNION ALL
SELECT '11' COLA, '4' COLB FROM DUAL UNION ALL
SELECT '12' COLA, '4' COLB FROM DUAL
)
SELECT
TO_CHAR(A.COLA,'YYYY')||B.COLA
FROM A,B
WHERE 1=1
AND TO_CHAR(A.COLA,'Q') = B.COLB


by 마농 [2021.12.06 10:15:33]
SELECT TO_CHAR(ADD_MONTHS(TRUNC(dt, 'q'), LEVEL - 1), 'yyyy-mm') ym
  FROM (SELECT TO_DATE('2021-10-05', 'yyyy-mm-dd') dt FROM dual)
 CONNECT BY LEVEL <= 3
;

SELECT SUBSTR(dt, 1, 5) || LPAD(CEIL(SUBSTR(dt, 6, 2) / 3) * 3 - 3 + LEVEL, 2, '0') ym
  FROM (SELECT '2021-02-08' dt FROM dual)
 CONNECT BY LEVEL <= 3
;

 

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