0

我有一个客户想要一份年终报告,该报告在其各自的月份列中显示数据,如下所示:

Income               Jan    Feb    Mar   ..... Dec
   Rent              10.00  10.00  10.00       10.00

Expenses
   Landscape         5.00   3.00   2.00        5.00

Net Income           5.00   7.00   8.00        5.00

所有的交易数据都存储在一个这样的表中

Create Table transaction(
   id int,
   date DATE,
   amount DECIMAL 10,2,
   account_type INT)

我不太确定如何开始。我使用 iReport 作为报表设计器,使用 mysql 作为数据库。有没有一种有效的方法使用 SQL 来获得这样的东西?做这样的事情SELECT date FROM transaction WHERE date between 1-01-2012 and 12-31-2012给我结果,然后使用我的 iReport 以某种方式将数据拆分为客户想要的列,对我来说更好吗?

我想知道最好的方法是什么,以及我如何才能做到这一点。

感谢您的帮助和想法。

4

3 回答 3

0

您可以使用pivot ...或...在sql中创建该输出

create table tmp ([date] date, amount decimal(10,2), accounttype int)

insert into tmp values ('1/1/2012', 10, 1)
insert into tmp values ('2/1/2012', 10, 1)
insert into tmp values ('3/1/2012', 10, 1)

select
  'RENT' title,
  sum(case when [date] = '1/1/2012' then amount else null end) Jan,
  sum(case when [date] = '2/1/2012' then amount else null end) Feb
from tmp
where accounttype = 1

哦,你必须用一些日期部分函数替换 "[date] = '1/1/2012'" 以确定它是哪个月份。

如果您必须在其中添加其他费用类型...使用“联合”将其添加到同一数据集..确保费用为负值...并且应使用 jasper 变量计算总数。

于 2012-12-11T18:06:28.047 回答
0

如果我正确理解了您的问题,那么这段代码可能会对您有所帮助。

 SELECT (DATE_FORMAT(date_col,'%m/%d/%Y')) as datecol  FROM transaction ;

如果这不是您想要的,请告诉我们。祝你好运。

于 2012-12-08T00:45:20.787 回答
0

Smit 和 Sam,感谢您的回复,我最终使用了您的两个 SQL 示例的一部分,但是,我最终采用了这些示例并最终在 iReport 中输出了报告。由于要求,我必须为每个月创建一个列,然后使用月(日期)来分隔每个月。因此,当报告运行时,它将每笔交易放在它所属的月份列下。

于 2012-12-18T16:46:17.520 回答