累计动态地对每个月的字段求和
Posted
技术标签:
【中文标题】累计动态地对每个月的字段求和【英文标题】:Sum a field for each month cummulatively and dynamically 【发布时间】:2012-04-27 14:46:33 【问题描述】:我有一个表,其中包含大约 50,000 条信息记录,这些信息记录已设置为追溯至当前财政年度的开始。
就目前而言,自上个月以来我没有更新此表,因此目前其中的数据假设我们仍在回顾 2011 年 4 月 1 日。
注意(当我刷新数据时,那里只有 2012 年 4 月的数据,就像我们现在在 4 月一样,然后在 5 月它将有 2012 年 4 月和 2012 年 5 月等等......)
每条记录都有我关心的 4 列:
Department,
Incident date,
month,
year,
reduced
月份和年份列都是从 事件日期 字段生成的,格式如下:
2011-06-29 00:00:00.000
我需要为每个部门汇总减少但以累积的方式。
例如,好像 2011 年 4 月将是我目前拥有的最早的月份/年份数据,我想知道 4 月份每个部门的总减少量。
那么对于 5 月,我希望将四月和五月结合起来,对于六月,我需要四月、五月、六月等等......
有没有一种智能的方法来做到这一点,这样一旦我将数据重新导入到这个表中,它就会意识到现在只有一个月,并且一年已经更新,现在到下个月只显示四月的总和(减少)
【问题讨论】:
Incident date
字段的类型是什么?约会时间? varchar?
@SelectDistinct 看看这里:- ***.com/questions/2120544/how-to-get-cumulative-sum
【参考方案1】:
以下将返回按Department
、Year
和Month
分组的累计总数。如果您在刷新时清除了上一个纳税年度的数据,则可以省略WHERE
子句。
SELECT T1.[Year],
T1.[Month],
T1.Department,
SUM(T2.Reduced) ReducedTotals
FROM [TABLENAME] T1
INNER JOIN [TABLENAME] T2 ON ( T1.Department = T2.Department AND T1.IncidentDate >= T2.IncidentDate )
WHERE T1.IncidentDate >= '2012-04-01'
GROUP BY T1.[Year],
T1.[Month],
T1.Department
ORDER BY T1.[Year],
T1.[Month],
T1.Department
【讨论】:
如果您正在处理大量记录,我建议您查看 cmets 部分中链接的其他答案。对于任何合理的音量,像这样的半笛卡尔积会变得非常慢,以至于即使是 [cough] 光标也会变得更快。 [但请注意,这确实有效:)]【参考方案2】:select t1.id, t1.singlenum, SUM(t2.singlenum) as sum
from @t t1 inner join @t t2 on t1.id >= t2.id
group by t1.id, t1.singlenum
order by t1.id
【讨论】:
以上是关于累计动态地对每个月的字段求和的主要内容,如果未能解决你的问题,请参考以下文章