Můžete to udělat pomocí rekurzivního CTE . Něco takového:
DECLARE @startDate datetime = '2/1/2014'
DECLARE @endDate datetime = '2/6/2014'
;WITH DateRange(RunningDate) AS
(
SELECT @startDate AS RunningDate
UNION ALL
SELECT RunningDate + 1
FROM DateRange
WHERE RunningDate < @endDate
)
SELECT id, RunningDate date, value1, value2
FROM DateRange LEFT JOIN myTable ON myTable.date = DateRange.RunningDate
Upravit... POKUD přejdete na toto řešení (vezměte na vědomí komentář Aarona Bertranda pod mou odpovědí), uvědomte si, že budete muset zadat také maximální rekurze pokud máte v úmyslu zabývat se rozsahy delšími než 3 měsíce. Výchozí hodnota je nastavena na 100. To znamená, že jak je dotaz aktuálně napsán, provede maximálně 101 dat (100 úrovní rekurze).
Můžete dodatečně zadat OPTION (MAXRECURSION 0)
na konci posledního SELECT
překonat toto. 0 znamená nekonečné úrovně rekurze. Ale znovu si všimněte Aaronova příspěvku.