在 SQL 中与 运行 求和查询作斗争

Struggling with Running Sum query in SQL

我正在为这个查询而苦苦挣扎。它正在为第一个仓库正确计算 运行 总和,但一旦它到达下一个仓库,它应该再次从零开始计算 运行 总和,但它继续使用前一个仓库的结束总数,我做错了什么?

这是我的查询,我还添加了输出图像。

SELECT 
    Depot
    ,WorkDayNr
    ,DayOfMonth
    ,Tons
    ,SUM (Tons) OVER (ORDER BY Depot, WorkDayNr) AS RunTotal
FROM #Final
GROUP BY Depot, WorkDayNr, DayOfMonth, Tons
ORDER BY Depot, WorkDayNr

只需在window函数中添加一个partition即可。结果集中列的名称与查询不匹配,所以我怀疑你想要 Depot 而不是 SubGrp

SUM (Tons) OVER (PARTITION BY Depot ORDER BY WorkDayNr) AS RunTotal

此外,我看不到在此查询中使用聚合的意义。您似乎混淆了需要聚合的聚合函数(SUM() 没有 OVER() 子句)和 window 函数。至于问题,您的查询应该只是:

SELECT 
    Depot,
    WorkDayNr,
    DayOfMonth,
    Tons,
    SUM (Tons) OVER (PARTITION BY Depot ORDER BY WorkDayNr) AS RunTotal
FROM #Final
ORDER BY Depot, WorkDayNr

您应该按软件仓库进行分区:

SELECT 
    Depot,
    WorkDayNr,
    DayOfMonth,
    Tons,
    SUM(Tons) OVER (PARTITION BY Depot ORDER BY WorkDayNr) AS RunTotal
FROM #Final
ORDER BY
    Depot,
    WorkDayNr;

另请注意,您的 GROUP BY 子句可能是多余且不必要的,因为您实际上并未选择任何聚合。当使用 SUM 作为分析函数时,聚合已经汇总到其中,无需使用 GROUP BY.

添加partition子句:

 SUM (Tons) OVER (PARTITION BY SUBGROUP ORDER BY Depot, WorkDayNr) AS RunTotal