これは、再帰的なCTE<を使用して行うことができます。 / a> 。このようなもの:
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
編集... このソリューションを使用する場合(私の回答の下にあるAaron Bertrandのコメントに注意してください)、最大再帰 3か月を超える範囲を処理する場合。デフォルトは100に設定されています。これは、クエリが現在記述されているため、最大101の日付(100レベルの再帰)のみを実行することを意味します。
さらに、OPTION (MAXRECURSION 0)
を指定できます。 最後のSELECT
の最後 これを克服するために。 0は、再帰の無限レベルを意味します。しかし、繰り返しになりますが、アーロンの投稿に注意してください。