CREATE TABLE Source (
Name varchar(64),
Year int,
Month int,
Value int
);
INSERT INTO Source VALUES
('Alex', 2020, 1, 1000),
('Alex', 2020, 3, 300),
('Budi', 2020, 3, 300);
WITH Calendar AS (
-- generate Year, Month table for each Name
SELECT Year, Month, Name
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12)) AS Months(Month)
CROSS JOIN (VALUES (2020)) AS years(Year)
CROSS JOIN (SELECT DISTINCT Name FROM Source) AS Names
) SELECT
Calendar.Year,
Calendar.Month,
Calendar.Name,
COALESCE(Source.Value, 0) AS Value,
SUM(COALESCE(Source.Value, 0)) OVER(PARTITION BY Calendar.Name ORDER BY Calendar.Year, Calendar.Month) AS cumulativeSum
FROM Calendar
LEFT JOIN Source ON
Source.Year = Calendar.Year AND
Source.Month = Calendar.Month AND
Source.Name = Calendar.Name ;