如何按月查询累计和期间

How to query cumulative sum period by month

我对 table 这样的来源有疑问:

table 中的可用月份仅与列月份相同,没有四月、五月、六月等

我需要创建一个视图来创建“年初至今”table,如下所示:

我需要查看 2020 年 1 月至 12 月的所有月份,其值基于 table 来源。

VALUE COLUMN 由同月的 Source 填充,但由于 4 月无法从 source 获得,因此它自动设置为 0,其他相同

对于由上个月值的总和填充的累积值列

我试过在查询时使用大小写,但如果我有很多名称而不是动态的,那就不简单了

可以使用下一个SQL构造:

 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 ;

MSSQL cumulative sum

查询使用 CTE 表达式生成日历 table 和 window 函数 SUM 按名称对分区计算累积值