你的位置:首页 > Java教程

[Java教程]FineReport制作可动态展开的组织递归树报表


先看看效果:


 

 

报表软件:FineReport

 

1.分析-与正常查询的对比

如果不做这种树状结构展开的报表的话,正常的SQL应该是这样写的,以单据表为例,假设单据的机构为分公司,经营部

select 分公司编码,分公司名称,经营部编码,经营部名称,sum(数量) 总数量,sum(金额) 总金额

from order_header,order_itemoi

whereoh.order_id=oi.order_id

andoh.party_id_from in ('$(分公司编码)')

andoh.confirm_date >to_date('${startDatre}','yyyy-mm-dd')

andoh.confirm_date<to_date('${endDatre}','yyyy-mm-dd')+1

group by 分公司编码,分公司名称,经营部编码,经营部名称

2.SQL-over partition的应用

如果要做成在经营部级别汇总金额和数量,同时在分公司级别也要汇总数量和金额的话,那么,需要在1中的基础上做增加,在每一行上增加一列,来表示当前行所在的分公司的汇总的金额和数量,SQL如下

select 分公司编码,分公司名称,经营部编码,经营部名称,

sum(数量) 经营部总数量,sum(sum(数量)) over (partition by 分公司编码)  分公司数量,

sum(金额) 经营部总金额,sum(sum(金额)) over (partition by 分公司编码)  分公司金额

fromorder_header,order_item oi

whereoh.order_id=oi.order_id

andoh.party_id_from in ('$(分公司编码)')

andoh.confirm_date >to_date('${startDatre}','yyyy-mm-dd')

andoh.confirm_date<to_date('${endDatre}','yyyy-mm-dd')+1

group by 分公司编码,分公司名称,经营部编码,经营部名称

3.展示界面的设置和访问注意事项

展示界面的设置,一点点写比较麻烦,我就不讲了。最后,访问的时候需要在url后面加上参数op=sheet