Anda dapat menghitung angka "periode" dengan kueri rekursif, sebagai berikut.
Seperti yang diungkapkan dalam komentar di bawah pertanyaan Anda, saya tidak begitu mengerti apa yang Anda maksud dengan kolom "minggu" (dan saya menduga mungkin definisi Anda sebenarnya tidak konsisten - terserah Anda untuk mengklarifikasi).
with
r (plan, period, max_periods, start_date) as (
select plan, 1, max_periods, start_date
from table_1
union all
select plan, period + 1, max_periods,
least(start_date + 7, add_months(trunc(start_date, 'mm'), 1))
from r
where period < max_periods
)
select plan, period, start_date
from r
;
PLAN PERIOD START_DATE
---- ---------- ----------
A 1 2020-05-01
A 2 2020-05-08
A 3 2020-05-15
A 4 2020-05-22
A 5 2020-05-29
A 6 2020-06-01
A 7 2020-06-08
A 8 2020-06-15
A 9 2020-06-22
A 10 2020-06-29
A 11 2020-07-01
A 12 2020-07-08
Ini didasarkan pada periode maksimum dari TABLE_1, dan saya tidak menggunakan TABLE_2 sama sekali. Anda dapat menggabungkan dua tabel setelah Anda membuat kumpulan hasil ini dari TABLE_1 saja, atau menyesuaikan pendekatan sesuai kebutuhan.