• Not currently at my desk so the syntax might need correcting, but could you do something like this?

    WITH CTE(N) AS (SELECT 1 FROM (VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))a(N)),

    CTE2(N) AS (SELECT 1 FROM CTE x CROSS JOIN CTE y),

    CTE3(N) AS (SELECT 1 FROM CTE2 x CROSS JOIN CTE2 y),

    CTE4(N) AS (SELECT 1 FROM CTE3 x CROSS JOIN CTE3 y),

    CTE5(N) AS (SELECT 1 FROM CTE4 x CROSS JOIN CTE4 y),

    CTE6(N) AS (SELECT 0 UNION ALL

    SELECT TOP 97199 ROW_NUMBER() OVER(ORDER BY (SELECT NULL))

    FROM CTE5),

    TALLY(N) AS (SELECT DATEADD(month, N, 0)

    FROM CTE6)

    SELECT a.N AS recorddate, ISNULL(b.myValue,0) AS myValue

    FROM TALLY a

    OUTER APPLY (SELECT DATEADD(month, DATEDIFF(month, 0, [recorddate]), 0), SUM([myvalue])

    FROM [#a] c

    WHERE DATEADD(month, DATEDIFF(month, 0, [recorddate]), 0) = a.N

    GROUP BY DATEADD(month, DATEDIFF(month, 0, [recorddate]), 0)

    ) b(recorddate,myValue)

    CROSS APPLY (SELECT MIN(DATEADD(month, DATEDIFF(month, 0, [recorddate]), 0)),

    MAX(DATEADD(month, DATEDIFF(month, 0, [recorddate]), 0))

    FROM [#a]) d(minDate,maxDate)

    WHERE a.N >= d.minDate AND a.N <= d.maxDate;


    Forever trying to learn
    My blog - http://www.cadavre.co.uk/
    For better, quicker answers on T-SQL questions, click on the following...http://www.sqlservercentral.com/articles/Best+Practices/61537/
    For better, quicker answers on SQL Server performance related questions, click on the following...http://www.sqlservercentral.com/articles/SQLServerCentral/66909/