1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| SQL> with A as (
select 1 as PK, to_date('06.05.2012','dd.mm.yyyy') as date_debut, to_date('02.03.2013','dd.mm.yyyy') as date_fin from dual union all
select 2 , to_date('02.09.2012','dd.mm.yyyy') , to_date('06.10.2012','dd.mm.yyyy') from dual
)
SELECT rownum as PK, t.PK as FK,
extract(month FROM add_months(t.date_debut, to_number(x.column_value)-1)) AS "MONTH",
extract(year FROM add_months(t.date_debut, to_number(x.column_value)-1)) AS "YEAR"
FROM A t
CROSS JOIN TABLE(
cast(multiset(
SELECT level
FROM dual
connect BY level <= months_between (to_date('01/'||to_char(date_fin,'mm/yyyy'),'dd/mm/yyyy'),to_date('01/'||to_char(date_debut,'mm/yyyy'),'dd/mm/yyyy'))+1
) AS sys.odcivarchar2list
)
) x
/
PK FK MONTH YEAR
---------- ---------- ---------- ----------
1 1 5 2012
2 1 6 2012
3 1 7 2012
4 1 8 2012
5 1 9 2012
6 1 10 2012
7 1 11 2012
8 1 12 2012
9 1 1 2013
10 1 2 2013
11 1 3 2013
12 2 9 2012
13 2 10 2012
13 rows selected.
SQL> |
Partager