Ik vind het het gemakkelijkst om deze problemen te benaderen door een lijst met gehele getallen te maken en die vervolgens te gebruiken om de datums te verhogen. Hier is een voorbeeld:
with nums as (
select 0 as n
union all
select n + 1 as n
from nums
where n < 11
)
select rowid, datestart, dateend,
year(dateadd(month, n.n, datestart)) as yr,
month(dateadd(month, n.n, datestart)) as mon
from table t join
nums n
on dateadd(month, n.n - 1, datestart) <= dateend;