• Some more sample data would probably make sense. Have a play with this and see how you get on:

    -- Amended function

    ALTER FUNCTION [dbo].[IF_Calendar] (@Enddate DATE)

    RETURNS TABLE AS RETURN

    WITH

    e1 AS (SELECT d.n FROM (VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) d (n)),

    e2 AS (SELECT a.n FROM e1 a, e1 b),

    iTally AS (SELECT n = -1+ROW_NUMBER() OVER(ORDER BY (SELECT NULL))FROM e2 a, e2 b)

    SELECT TheDate, [DayName],

    DayNo = 1+(DATEPART(dw, TheDate)+@@DATEFIRST-2)%7,

    WeekNo = ROW_NUMBER() OVER(PARTITION BY YEAR(TheDate), MONTH(TheDate), [DayName] ORDER BY TheDate)

    FROM ( -- f

    SELECT TheDate, [DayName] = DATENAME(WEEKDAY,TheDate)

    FROM ( -- e

    SELECT TheDate = CAST(DATEADD(day,n,Startdate) AS DATE)

    FROM ( -- d

    SELECT

    Startdate = DATEADD(YEAR,-2,DATEADD(MONTH,DATEDIFF(MONTH,0,@Enddate),0)),

    Enddate = CAST(@Enddate AS DATE)

    ) d

    CROSS APPLY (SELECT TOP(1+DATEDIFF(day,Startdate,Enddate)) n FROM iTally) x

    ) e

    ) f

    GO

    -- Amended query

    ;WITH MyData AS (SELECT * FROM (VALUES

    ('2012-11-12', 'DM1', 'Monday', 750),

    ('2012-11-12', 'DM4', 'Monday', 76),

    ('2012-11-12', 'DM5', 'Monday', 501),

    ('2012-11-13', 'DM1', 'Tuesday', 110),

    ('2012-11-13', 'DM4', 'Tuesday', 476),

    ('2012-11-13', 'DM5', 'Tuesday', 1501),

    ('2012-11-29', 'DM1', 'Thursday', 110),

    ('2012-11-29', 'DM4', 'Thursday', 476),

    ('2012-11-29', 'DM5', 'Thursday', 1501),

    ('2013-11-11', 'DM1', 'Monday', 1542),

    ('2013-11-11', 'DM4', 'Monday', 12),

    ('2013-11-11', 'DM2', 'Monday', 235),

    ('2013-11-12', 'DM1', 'Tuesday', 152),

    ('2013-11-12', 'DM3', 'Tuesday', 1214),

    ('2013-11-12', 'DM5', 'Tuesday', 2035),

    ('2013-11-28', 'DM1', 'Thursday', 1521),

    ('2013-11-28', 'DM3', 'Thursday', 4021),

    ('2013-11-28', 'DM4', 'Thursday', 25),

    ('2012-12-03','DM1','Monday',441),

    ('2012-12-03','DM3','Monday',10),

    ('2012-12-10','DM4','Monday',25),

    ('2013-12-02','DM1','Monday',1521),

    ('2013-12-03','DM4','Monday',4021),

    ('2013-12-03','DM4','Monday',25),

    ('2014-12-03','DM1','Thursday',1521),

    ('2014-12-03','DM3','Thursday',4021),

    ('2014-12-03','DM4','Thursday',25)

    ) d ([Date], Stack, [DayName], ParcelCount)

    )

    SELECT

    [Month] = DATENAME(MONTH,c.TheDate),

    m.Stack,

    c.WeekNo,

    c.[DayName],

    ParcelCount2012 = SUM(CASE WHEN YEAR(c.TheDate) = 2012 THEN m.ParcelCount ELSE 0 END),

    ParcelCount2013 = SUM(CASE WHEN YEAR(c.TheDate) = 2013 THEN m.ParcelCount ELSE 0 END),

    ParcelCount2014 = SUM(CASE WHEN YEAR(c.TheDate) = 2014 THEN m.ParcelCount ELSE 0 END)

    FROM [dbo].[IF_Calendar] (GETDATE()) c

    inner JOIN MyData m

    ON m.[Date] = c.TheDate

    WHERE MONTH(c.TheDate) IN (11,12)

    GROUP BY

    MONTH(c.TheDate),

    DATENAME(MONTH,c.TheDate),

    c.WeekNo,

    c.DayNo,

    c.[DayName],

    m.Stack

    ORDER BY

    MONTH(c.TheDate),

    c.WeekNo,

    c.DayNo,

    c.[DayName],

    m.Stack

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden