累计和动态地对每个月的字段求和

时间:2012-04-27 14:46:34

标签: sql sql-server sql-server-2008 tsql

我有一张表格,其中包含大约50,000条信息记录,这些记录已经设置为回顾当前财政年度的开始。

目前我从上个月开始没有更新此表,所以目前的数据假设我们仍然可以追溯到2011年4月1日。

注意(当我刷新数据时,我们现在将在4月份出现2012年4月的数据,然后是5月份将有2012年4月和2012年5月等等......)

每条记录都有我关注的4列:

Department,
Incident date,
month,
year,
reduced

月份和年份列均来自事件日期字段,格式为:

2011-06-29 00:00:00.000

我需要为每个部门,累计减少但累积的方式。

例如,看看2011年4月将是我目前最早的月/年数据,我想知道4月份每个部门的总减少量。

然后五月我想要四月&可能合并,六月我需要四月,五月,六月等......

有没有一种明智的方法可以做到这一点,一旦我将数据重新导入到这个表中,它就会意识到现在只有一个月而且这一年已经更新,现在直到下个月只显示4月份的总和(降低)

2 个答案:

答案 0 :(得分:1)

以下内容将返回按DepartmentYearMonth分组的累计总数。如果您在刷新时清除上一个纳税年度的数据,则可以省略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

答案 1 :(得分:1)

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