Q:

Calendar showing null when date begins in previous year

This is the syntax I am using to create my calendar.  The issue that I have is that since the startdate of Week1 is in 2012, startdate is showing as null.  Is there a way to have the startdate (or enddate in other instances) populate even when it is in a different year? @Winds Of Change ---
That adds in a start date and end date where previously it was null.  But what I am after is for example, I need my date range to run Sat - Wed.  So let's take week 53 for 2013.  The date range should be 12/28/2013 -- 01/01/14.  Is there a way to tinker the calander into displaying in that format?
CREATE TABLE dbo.Calendar (
    CalendarYear INT NOT NULL,
    CalendarWeek INT NOT NULL,
    WeekStartDate VARCHAR(50),
    WeekEndDate VARCHAR(50),
    CONSTRAINT PK_Calendar PRIMARY KEY (
        CalendarYear,
        CalendarWeek
        )
    )

SET DATEFIRST 6

DECLARE @StartDate DATETIME,
    @NumOfDays INT

SET @StartDate = '20130101'
SET @NumOfDays = 1000;

WITH calendar
AS (
    SELECT TOP (@NumOfDays) dateadd(day, row_number() OVER (
                ORDER BY sc1.column_id
                ) - 1, @StartDate) AS CalendarDate
    FROM sys.columns sc1
    CROSS JOIN sys.columns sc2
    )
INSERT INTO dbo.Calendar (
    CalendarYear,
    CalendarWeek,
    WeekStartDate,
    WeekEndDate
    )
SELECT DATEPART(year, c.CalendarDate) AS Year,
    convert(VARCHAR(100), DATEPART(week, c.CalendarDate)) AS Week, --DATEPART(week, c.CalendarDate) AS Week,    
    MAX(CASE DATEPART(WEEKDAY, c.CalendarDate)
            WHEN 1
                THEN convert(VARCHAR(50), c.CalendarDate, 101)
            ELSE NULL
            END) AS StartDate,
    MAX(CASE DATEPART(WEEKDAY, c.CalendarDate)
            WHEN 7
                THEN convert(VARCHAR(50), c.CalendarDate, 101)
            ELSE NULL
            END) AS EndDate
FROM calendar c
GROUP BY DATEPART(year, c.CalendarDate),
    DATEPART(Week, c.CalendarDate)
ORDER BY Year,
    startdate,
    convert(VARCHAR(100), DATEPART(week, c.CalendarDate)) --Week

SELECT *
FROM dbo.Calendar

A:

So your problem is is that you're grouping by week and year, but at the beginning/end of the year, the year begins/ends on a different week.  So if the first week starts on Wednesday, it's only a 3 day week for that Year.
I've had a small tinker, and I've got it working so that it displays the first/last day of the year as the start/end date of the week, by changing things around.  Here is my modified version:
SELECT
   DATEPART(year, c.CalendarDate) AS Year,
   convert(VARCHAR(100), DATEPART(week, c.CalendarDate)) AS Week, --DATEPART(week, c.CalendarDate) AS Week,    
   convert(VARCHAR(50), MIN(c.CalendarDate), 101) AS StartDate,
   convert(VARCHAR(50), MAX(c.CalendarDate), 101) AS EndDate
FROM 
   calendar c
GROUP BY 
   DATEPART(year, c.CalendarDate),
   DATEPART(Week, c.CalendarDate)
ORDER BY 
   Year,
   startdate,
   convert(VARCHAR(100), DATEPART(week, c.CalendarDate)) --Week

Hope this helps.
EDIT: In response to your comment/edit, have a look at these update statements.  Put them after your insert.
EDIT2: Don't use the above insert as well as the updates.
update dbo.Calendar set WeekStartDate = convert(VARCHAR(50), dateadd(day, 1, dateadd(week, -1, cast(WeekEndDate as datetime))), 101)
where WeekStartdate is null

update dbo.Calendar set WeekEndDate = convert(VARCHAR(50), dateadd(day, -1, dateadd(week, 1, WeekStartDate)), 101)
where WeekEndDate is null

