我想用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中执行此操作,因此欢迎使用任何解决方案。 我有什么方法可以做到这一点吗?
答案 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所示。