Попробуйте:
DECLARE @DataSource TABLE
(
[Code] INT
,[Date] DATE
,[value] INT
);
INSERT INTO @DataSource ([Code], [Date], [value])
VALUES (1000, '2016-08-05', 5000)
,(1000, '2016-12-27', 8000)
,(1000, '2018-03-19', 6000)
,(1000, '2018-06-02', 6000);
WITH Ranges AS
(
SELECT *
,LEAD([Date]) OVER (ORDER BY [Date] ASC) AS [DateEnd]
FROM @DataSource DS
)
SELECT *
FROM Ranges
CROSS APPLY
(
SELECT DATEADD(MONTH, [number], [Date])
FROM
(
select number
from master.dbo.spt_values
where [type] = 'P'
) numbers
WHERE DATEADD(MONTH, [number], [Date]) < [DateEnd]
) AutoDates ([GeneratedDate]);
Идея проста - с помощью LEAD
получить верхнюю границу диапазона дат. Затем, имея дату начала и окончания, просто сгенерируйте недостающие месяцы, используя функцию DATEADD
.