在 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
我正在为这个查询而苦苦挣扎。它正在为第一个仓库正确计算 运行 总和,但一旦它到达下一个仓库,它应该再次从零开始计算 运行 总和,但它继续使用前一个仓库的结束总数,我做错了什么?
这是我的查询,我还添加了输出图像。
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