Try this for easier reading and not using cursorsCREATE PROCEDURE RPT_WeeklyTest( @StartDate DATETIME, @EndDate DATETIME, @DateInterval TINYINT)ASSET NOCOUNT ONIF @StartDate IS NULL OR @EndDate IS NULL BEGIN RAISERROR ('All dates are not supplied.', 16, 1) RETURN ENDELSE SELECT @StartDate = DATEADD(day, DATEDIFF(day, 0, @StartDate), 0), @EndDate = DATEADD(day, DATEDIFF(day, 0, @EndDate), 0)SELECT MIN(LEFT(CONVERT(varchar, fdt.DATE, 103), 5) + '-' + LEFT(CONVERT(varchar, DATEADD(day, @DateInterval - 1, fdt.DATE), 103), 5)) [Week], ISNULL(SUM(d.Alt1), 0) [Count(1)], ISNULL(SUM(d.Alt2), 0) [Count(2)]FROM F_TABLE_DATE(@StartDate, @EndDate) fdtLEFT JOIN ( SELECT DATEADD(day, DATEDIFF(day, 0, DateCreated), 0) DateCreated, SUM(CASE WHEN TktSubmittedBy = 'U' THEN 1 ELSE 0 END) Alt1, SUM(CASE WHEN TktSubmittedBy = 'A' THEN 1 ELSE 0 END) Alt2 FROM Tickets WHERE DATEADD(day, DATEDIFF(day, 0, DateCreated), 0) BETWEEN @StartDate AND @EndDate GROUP BY DATEADD(day, DATEDIFF(day, 0, DateCreated), 0) ) d ON fdt.DATE = d.DateCreatedGROUP BY DATEDIFF(day, @StartDate, fdt.DATE) / @DateIntervalORDER BY DATEDIFF(day, @StartDate, fdt.DATE)
Call withEXEC RPT_WeeklyTest '20060804', '20060925', 5Peter LarssonHelsingborg, Sweden