Jak zmínil Alex K, měli byste to napsat jako funkci s hodnotou inline tabulky. Zde je článek která o tom popisuje.
Stručně řečeno, syntaxe by byla něco jako
CREATE FUNCTION dbo.GetForPeriod
( @StartDate datetime, @EndDate datetime)
RETURNS TABLE
RETURN
SELECT [[ your column list ]]
FROM [[ table list]
WHERE [[some column] BETWEEN @StartDate AND @EndDate
Můžete mít jeden výběrový dotaz (jakkoli složitý, může používat CTE). A pak jej použijete jako
SELECT * FROM dbo.GetForPeriod('1-Jan-2010', '31-Jan-2010')