create table  (ؿ, , )
as
select '2009/06', '2009/06/01', '2009/06/30' from dual union all
select '2009/07', '2009/07/01', '2009/07/31' from dual union all
select '2009/08', '2009/08/01', '2009/08/31' from dual union all
select '2009/09', '2009/09/01', '2009/09/30' from dual union all
select '2009/10', '2009/10/01', '2009/10/31' from dual;

create table ̷(ǰȣ, , , )
as
select 'A', '2009/07/13', '2009/08/08', 'A1' from dual union all
select 'A', '2009/08/09', '2009/08/20', 'A2' from dual union all
select 'A', '2009/08/21', '2009/10/07', 'A3' from dual;

select a.ؿ, b., b., b.ǰȣ, b.
from    a, ̷ b
where  b. <= a.
and    b. >= a.
order by a.ؿ, b. ;

select ǰȣ
  , case when lst = 1 and gst = 2 then 2  -- Ÿ a
         when lst = 2 and gst = 1 then 1  -- Ÿ b
         when lst = 1 and gst = 1 then 2  -- Ÿ c
         when lst = 2 and gst = 2 then 1  -- Ÿ d
    end 
  , case when lst = 1 and gst = 2 then 1  -- Ÿ a
         when lst = 2 and gst = 1 then 2  -- Ÿ b
         when lst = 1 and gst = 1 then 2  -- Ÿ c
         when lst = 2 and gst = 2 then 1  -- Ÿ d
    end 
     , 
from (
  select b.ǰȣ, b., a.ؿ
       , a. 1, b. 2
       , a. 1, b. 2
       , least(a., a., b., b.) lst
       , greatest(a., a., b., b.) gst
  from    a, ̷ b
  where  b. <= a.
  and    b. >= a.
) ;

