SQLize Online / PHPize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
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 ;

Stuck with a problem? Got Error? Ask ChatGPT!

Copy Clear