I think that you could do something like this:
select
m.month
,sum(d.MonthlyCost)
from
months as m
inner join data as d
on d.SubscriptionStartDate < m.endDate
and d.SubscriptionEndDate > m.start
group by
m.month
You would need to create the table "months" that would look like this:
month | start | end
'jan-13' | 01/01/2013 | 31/01/2013
'feb-13' | 01/02/2013 | 28/02/2013
'mar-13' | 01/03/2013 | 31/03/2013
but this is saying if you are in that month at all (even for one day) then you rmonthly subscription should be added. Is that correct?
Note: i don't have access here and i cant remember if my syntax is perfect for access. (i think you need brackets in the join clauses or something)