Hi all,
my DB version is 10gR2.
here is the table and the data:
create table t (from_dt date, to_dt date, eno varchar2(2), deptno varchar2(10));
insert into T values (TO_DATE('2010-01-01','yyyy-mm-dd'),TO_DATE('2010-04-30','yyyy-mm-dd'),'A','DEPTA');
insert into T valueS (TO_DATE('2010-05-01','yyyy-mm-dd'),TO_DATE('2010-12-31','yyyy-mm-dd'),'A','DEPTB');
insert into T values (TO_DATE('2010-01-01','yyyy-mm-dd'),TO_DATE('2010-06-30','yyyy-mm-dd'),'B','DEPTA');
insert into T valueS (TO_DATE('2010-07-01','yyyy-mm-dd'),TO_DATE('2010-12-31','yyyy-mm-dd'),'B','DEPTB');
from_dt to_dt ENO DEPTNO
------------------------------------------------
2010-01-01 2010-04-30 A DEPTA
2010-05-01 2010-12-31 A DEPTB
2010-01-01 2010-06-30 B DEPTA
2010-07-01 2010-12-31 B DEPTB
Here is the result I want:
MONTH ENO DEPTNO
-----------------------------
2010-01 A DEPTA
2010-02 A DEPTA
2010-03 A DEPTA
2010-04 A DEPTA
2010-05 A DEPTB
...............
Here is what I came up with:
select distinct ADD_MONTHS(TRUNC(FROM_DT,'MON'),level-1) as MONTHS,
ENO,
DEPTNO
from (
select FROM_DT, TO_DT, ENO, DEPTNO, ROUND(MONTHS_BETWEEN(TO_DT, FROM_DT)) as BET from T
) connect by level<=BET
order by eno, deptno,months ;
the problem with this is that, many duplicate rows are generated if I remove DISTINCT from the sql.
and I don`t know how that happens? How CONNECT BY LEVEL, returns me so many duplicate rows?
Anyone have any idea about this?
And is there any other way to do this as well?
Thanks