• If I may make a fine point:

    It is more accurate to say that in a multi-statement batch, the statement (query) preceding a CTE should be terminated by a semi-colon.

    I find the following just a little easier to grasp: (Change MonthCount to int)

    With CTE_Base (SeqNo, Begin_Date, Month_Count, Payment)

    as

    (select SeqNo, Date_Field AS Begin_Date,Month_Count, Payment from dbo.abc

    UNION all

    select SeqNo, dateadd(mm, 1, Begin_Date), Month_Count -1, Payment from CTE_Base

    where Month_Count > 1

    )

    SELECT SeqNo, Begin_Date, Month_Count, Payment

    FROM CTE_Base

    order by SeqNo, Begin_Date