WITH each AS ( SELECT an_eventid, an_label_range_start AS n, an_label_range_end FROM SERVER01.dbo.campaign where an_label_range_start is not NULL UNION ALL SELECT an_eventid, n + 1, an_label_range_end FROM each WHERE n + 1 <= an_label_range_end ) SELECT an_eventid, n FROM each order by an_EventID,n