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

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】:

以下将返回按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

【讨论】:

如果您正在处理大量记录,我建议您查看 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 

【讨论】:

以上是关于累计动态地对每个月的字段求和的主要内容,如果未能解决你的问题,请参考以下文章

我对所有值求和,但为啥它不适用于所有动态总计字段

hibernate动态创建表

动态规划--合法括号字段

EXCEL中如何实现动态显示每个月的数据?

EXCEL中如何实现动态显示每个月的数据

使用NSExpression expressionForSubquery有条件地对数据求和