我想用 jasperreports 制作一份报告,汇总我们当月的契约(Contract),但将所有新旧契约(Contract)添加到当月。数据库是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 来完成此操作,因此欢迎任何解决方案。 有什么办法可以做到这一点吗?
最佳答案
MySQL 没有 CTE,这很不方便,但 View 可以在紧要关头使用。
create view MonthlyTotals as
select Month( ContractDate ) as ContractMonth, Sum( ContractQty ) as TotalQty
from contracts
group by ContractMonth;
现在我们可以将 View 本身加入进来,维护当月和之前所有月份的运行总计:
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所示.
关于mysql - 如何在 jasperreports 中聚合(总和)整个月的值(每个月应该是之前所有月份的总和),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24395490/