Create table of two consecutive months if date range belong to two months
select to_date('01-JUL-2019')+level-1 "JULY", CASE WHEN MONTHS_BETWEEN('09-AUG-2019','01-JUL-19')>1 THEN
CASE WHEN LEVEL<=TO_NUMBER(TO_CHAR(TO_DATE('09-AUG-2019'),'DD'))
THEN ADD_MONTHS('01-JUL-2019',1)+LEVEL-1 END END "August"
FROM DUAL
CONNECT BY LEVEL<=CASE WHEN MONTHS_BETWEEN('09-AUG-2019', '01-JUL-19')>1
THEN TO_NUMBER(TO_CHAR(LAST_DAY('01-JUL-2019'),'DD'))
ELSE TO_DATE('09-AUG-2019')-TO_DATE('01-JUL-2019') +1 END
-----------------------------------
ANOTHER METHOD
-----------------------------------
SELECT "JULY", "AUGUST"
FROM
(
SELECT ROWNUM RN, CASE WHEN TO_CHAR(TO_DATE(MNTH),'MON')='JUL' THEN MONTH END "JULY"
FROM (
SELECT TO_DATE('01-JUL-2019')+LEVEL-1 MNTH FROM DUAL
CONNECT BY LEVEL<=TO_DATE('09-AUG-19')-T0_DATE('01-JUL-2019')+1
)
WHERE CASE WHEN TO_CHAR(TO_DATE(MNTH),'MON')='JUL' THEN MNTH END IS NOT NULL
) A
LEFT OUTER JOIN
(
SELECT ROWNUM RN, CASE WHEN TO_CHAR(TO_DATE(MNTH),'MON')='AUG' THEN MNTH END "AUGUST"
FROM (
SELECT TO_DATE('01-JUL-2019')+LEVEL -1 MNTH FROM DUAL
CONNECT BY LEVEL<=TO_DATE('09-AUG-19')-TO_DATE('01-JUL-2019)+1
)
WHERE CASE WHEN TO_CHAR(TO_DATE(MNTH),'MON')='AUG' THEN MNTH END IS NOT NULL
) B
ON (A.RN=B.RN)
ORDER BY A.RN
CASE WHEN LEVEL<=TO_NUMBER(TO_CHAR(TO_DATE('09-AUG-2019'),'DD'))
THEN ADD_MONTHS('01-JUL-2019',1)+LEVEL-1 END END "August"
FROM DUAL
CONNECT BY LEVEL<=CASE WHEN MONTHS_BETWEEN('09-AUG-2019', '01-JUL-19')>1
THEN TO_NUMBER(TO_CHAR(LAST_DAY('01-JUL-2019'),'DD'))
ELSE TO_DATE('09-AUG-2019')-TO_DATE('01-JUL-2019') +1 END
-----------------------------------
ANOTHER METHOD
-----------------------------------
SELECT "JULY", "AUGUST"
FROM
(
SELECT ROWNUM RN, CASE WHEN TO_CHAR(TO_DATE(MNTH),'MON')='JUL' THEN MONTH END "JULY"
FROM (
SELECT TO_DATE('01-JUL-2019')+LEVEL-1 MNTH FROM DUAL
CONNECT BY LEVEL<=TO_DATE('09-AUG-19')-T0_DATE('01-JUL-2019')+1
)
WHERE CASE WHEN TO_CHAR(TO_DATE(MNTH),'MON')='JUL' THEN MNTH END IS NOT NULL
) A
LEFT OUTER JOIN
(
SELECT ROWNUM RN, CASE WHEN TO_CHAR(TO_DATE(MNTH),'MON')='AUG' THEN MNTH END "AUGUST"
FROM (
SELECT TO_DATE('01-JUL-2019')+LEVEL -1 MNTH FROM DUAL
CONNECT BY LEVEL<=TO_DATE('09-AUG-19')-TO_DATE('01-JUL-2019)+1
)
WHERE CASE WHEN TO_CHAR(TO_DATE(MNTH),'MON')='AUG' THEN MNTH END IS NOT NULL
) B
ON (A.RN=B.RN)
ORDER BY A.RN
Comments
Post a Comment