Tôi thấy dễ dàng nhất để giải quyết những vấn đề này bằng cách tạo một danh sách các số nguyên và sau đó sử dụng danh sách đó để tăng ngày tháng. Đây là một ví dụ:
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;