Если я что-то не упускаю полностью, вы делаете вещи слишком сложными. Попробуйте вместо этого:
SELECT [ApplicationTitle] AS "ApplicationTitle",
SUM(CASE WHEN [DataDate] >= '01/06/2009' AND [DataDate] < '08/06/2009' THEN [Visits] ELSE 0 END) AS "Visits",
SUM(CASE WHEN [DataDate] >= '01/05/2009' AND [DataDate] < '08/05/2009' THEN [Visits] ELSE 0 END) AS "PVisits",
SUM(CASE WHEN [DataDate] >= '01/06/2009' AND [DataDate] < '08/06/2009' THEN [NewVisits] ELSE 0 END) AS "NewVisits",
SUM(CASE WHEN [DataDate] >= '01/05/2009' AND [DataDate] < '08/05/2009' THEN [NewVisits] ELSE 0 END) AS "PNewVisits",
FROM [HeadlineFigures]
WHERE ([DataDate] >= '01/06/2009' AND [DataDate] < '08/06/2009')
OR ([DataDate] >= '01/05/2009' AND [DataDate] < '08/05/2009')
GROUP BY [ApplicationTitle]
ORDER BY [ApplicationTitle]
Редактировать: К сожалению, я неправильно прочитал диапазон данных.
Я надеюсь, что SQL-сервер хорошо справится с использованием индекса по DataDate, иначе предложение from должно выглядеть примерно так:
FROM (SELECT * FROM [ApplicationTitle] WHERE [DataDate] >= '01/06/2009' AND [DataDate] < '08/06/2009'
UNION
SELECT * FROM [ApplicationTitle] WHERE [DataDate] >= '01/05/2009' AND [DataDate] < '08/05/2009') x