如何在jasperreports中汇总(总和)一个月的值(每个月应该是前一个月的总和)

时间:2014-06-24 20:15:36

标签: mysql sql jasper-reports aggregate

我想用jasperreports做一份报告,该报告汇总了我们月份的合同,但是将所有新旧合同添加到当月。该数据库是一个mysql数据库。 我的SELECT看起来像下面的示例数据:

SELECT month(contract_date), amount
FROM contracts
WHERE year(contract_date)=2013
GROUP BY month(contract_date)

1.1.2013 300
1.1.2013 500
1.2.2013 250
1.3.2013 250

现在我明白了:

1 800
2 250
3 250
...

但我希望:

1 800
2 1050
3 1300
...

所以每个月都包含前一个月的金额。

我不介意我是否可以在SQL或jasperreports / iReport中执行此操作,因此欢迎使用任何解决方案。 我有什么方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

MySQL不具备不方便的CTE,但是视图会在紧要关头。

create view MonthlyTotals as
    select  Month( ContractDate ) as ContractMonth, Sum( ContractQty ) as TotalQty
    from    contracts
    group by ContractMonth;

现在我们可以自己加入视图,保持一个月和前几个月的总计:

select  t1.ContractMonth, t1.TotalQty, Sum( t2.TotalQty ) as RunningTotal
from    MonthlyTotals t1
join    MonthlyTotals t2
  on    t2.ContractMonth <= t1.ContractMonth
group by t1.ContractMonth;

输出与您想要的输出相匹配,如SQL Fiddle所示。