Get counts grouped by month and year
Wrap this up in a stored procedure then:

CREATE PROCEDURE GetYearCounts
    @year INT
AS
    SELECT YEAR(crdate) AS y,
           MONTH(crdate) AS m,
           COUNT(*) AS tally
    FROM   MESSAGE
    WHERE  YEAR(crdate) = @year
           AND SUBJECT &lt;&gt; 'Welcome' --exclude default messages
    GROUP BY
           YEAR(crdate),
           MONTH(crdate);
GO


This will allow you to specify the year you want to get the data from in the call.  I.e.

EXEC GetYearCounts @year = 2012;
GO



  This is what I have but its limiting in that I need to manually change years.


Given your requirements there is no way to do this automatically.