Я думаю, что вы в основном спрашиваете, как проходить месяцы / недели / кварталы.
Это должно дать вам хорошее начало, чтобы, я надеюсь, указать правильное направление. Вам просто нужно возиться со встроенными функциями даты SQL, такими как DATEADD, DATEDIFF & DATEPART
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
DECLARE @TimePeriod NVARCHAR(50)
DECLARE @RptDate DATETIME
SET @startDate = '1/15/2011'
SET @endDate = '12/31/2011'
SET @TimePeriod = 'Monthly'
SET @RptDate = @startDate
WHILE @RptDate < @endDate
BEGIN
PRINT @RptDate --- This prints out the dates I think you want
IF @TimePeriod = 'Monthly'
SET @RptDate = DATEADD(mm, 1, DATEADD(dd, -DAY(@RptDate) + 1,@RptDate))
IF @TimePeriod = 'Weekly'
SET @RptDate = DATEADD(ww, 1, DATEADD(dd, -DATEPART(weekday,@RptDate) + 1,@RptDate))
IF @TimePeriod = 'Quarterly'
SET @RptDate = DATEADD(qq, 1, DATEADD(qq, DATEDIFF(qq, 0, @RptDate), -1) + 1)
END