mysql - 如何在 jasperreports 中聚合(总和)整个月的值(每个月应该是之前所有月份的总和)

标签 mysql sql jasper-reports aggregate

我想用 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/

相关文章:

php - 返回忽略 SQL 查询中设置的年份限制的所有数据

php - YOURLS 插件过滤特定 MySQL 列的 API 调用

sql - FROM 子句中子查询末尾随机字母的含义 - SQL

java - 如何在DynamicReports和JasperReports中获得相同的样式

mysql - R, Shiny ,应用程序之前的弹出窗口

php - 简化从mysql数据库取数据的代码

MySQL选择分隔数据

sql - 多个 SQL 连接

java - 使用quartz调度程序调度jasper报告

java - 在 Spring Boot 中将生成的报告作为电子邮件附件发送