I am taking a guess, but something like this:
-- Setup sample table a and data.
create table #TestData(
ContractNumber int,
StartDate date,
RentalAmount int,
RentalFrequency varchar(10)
);
insert into #TestData
values (12345,'2013-01-01',100,'Quarterly'),
(23456,'2014-02-01',125,'Monthly'),
(34567,'2014-02-01',135,'Quarterly'),
(23456,'2014-02-01',150,'Annual');
with e1(n) as (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
e2(n) as (select 1 from e1 a cross join e1 b),
e4(n) as (select 1 from e2 a cross join e2 b),
eTally(n) as (select row_number() over (order by (select null)) from e4 a cross join e2 b)
select
td.ContractNumber,
rd.RentalDate,
td.RentalAmount
from
#TestData td
cross apply (select top (datediff(month, td.StartDate, getdate()) / case td.RentalFrequency when 'Monthly' then 1 when 'Quarterly' then 3 when 'Annual' then 12 end + 1)
dateadd(month, (n - 1) * case td.RentalFrequency when 'Monthly' then 1 when 'Quarterly' then 3 when 'Annual' then 12 end, td.StartDate)
from
eTally) rd(RentalDate);
-- drop test data
drop table #TestData;