Я использую следующий запрос в порядке, чтобы заполнить пропущенные месяцы
Declare @Sample Table(year int, month int,product as nvarchar(50), qty_ytd int);
Insert @Sample(year, month, qty_ytd) Values
(2017, 01,'book', 20),
(2017, 02, 'pc', 30),
(2018, 01, 'book', 50);
;With Months As
(Select 1 As month
Union All
Select month + 1 From Months Where month < 12)
, YearsAndMonths As
(Select distinct year,m.month from @Sample cross join Months m)
select ym.*, coalesce(s.qty_ytd, s2.qty_ytd) qty_ytd, coalesce(s.qty_ytd, 0) QTY from YearsAndMonths ym
left join @sample s on ym.year = s.year and ym.month = s.month
left join (select qty_ytd, year,
row_number() over (partition by year order by month desc) rn
from @Sample) s2 on ym.year = s2.year and rn = 1
Как я могу также добавить «продукт»?