我有一个客户希望年终报告显示其各自月份列中的数据,如下所示:
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以某种方式将数据拆分成客户想要的列?
我想知道最好的方法是什么以及如何实现这一目标。
感谢您的帮助和想法。
答案 0 :(得分:0)
如果我正确理解了您的问题,那么这段代码可能会对您有所帮助。
SELECT (DATE_FORMAT(date_col,'%m/%d/%Y')) as datecol FROM transaction ;
如果这不是您想要的,请告诉我们。 祝你好运。
答案 1 :(得分: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'”来确定它是哪个月份。
如果您必须在其中添加其他费用类型...使用“union”将其添加到同一数据集中。确保费用为负值...并且应使用jasper变量计算总数。< / p>
答案 2 :(得分:0)
Smit和Sam,感谢您的回复,我最终使用了两个SQL示例的部分内容,但是,我最终采用了这些示例并最终在iReport中输出报告。我必须为每个月创建一个列,然后根据要求使用月份(日期)将每个月分开。因此,当报告运行时,将每个事务放在它所属的月份列下。