• I don't have your table structures, but I'd like to present an alternate way. Instead of relying on the data that's there, create a table of months you want to report and then update it from your data table. This will use a tally table to populate a temp table with one row per month going back 13 months from a base date. If you aren't familiar with tally tables yet, check out the article at http://www.sqlservercentral.com/articles/T-SQL/62867/ and take the time to get familiar with them. They will change the way you look at data.

    DECLARE @dtmBase datetime = '11/01/2013';

    IF OBJECT_ID('tempdb.dbo.#tblMonths', 'u') IS NOT NULL DROP TABLE #tblMonths;

    CREATE TABLE #tblMonths (

    ID Integer not null identity (1, 1),

    Start Datetime not null,

    TheCount Integer);

    INSERT INTO #tblMonths(Start, TheCount)

    SELECT DATEADD(month, -t.N + 1, @dtmBase), 0

    FROM Tally1K t

    WHERE t.N <= 13

    ORDER BY 1 DESC;

    You can then update #tblMonths.TheCount from your data table using the dates in your #tblMonths table. If you have the date field indexed, I expect that it would perform acceptably.