可动态展开的组织递归树报表制作

楼主
我是社区第1921位番薯,欢迎点我头像关注我哦~
本帖最后由 newker 于 2013-9-18 11:27 编辑

FineReport版本:6.5 Build #2010.03.02.06.14.25.406
数据库:Oracle 10g 企业版

先给大家看一下报表的最终效果图

1.分析-与正常查询的对比
如果不做这种树状结构展开的报表的话,正常的SQL应该是这样写的,以单据表为例,假设单据的机构为分公司,经营部
select 分公司编码,分公司名称,经营部编码,经营部名称,sum(数量) 总数量,sum(金额) 总金额
from order_header,order_item oi
where oh.order_id=oi.order_id
and oh.party_id_from in ('$(分公司编码)')
and oh.confirm_date >to_date('${startDatre}','yyyy-mm-dd')
and oh.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 分公司编码)  分公司金额
from order_header,order_item oi
where oh.order_id=oi.order_id
and oh.party_id_from in ('$(分公司编码)')
and oh.confirm_date >to_date('${startDatre}','yyyy-mm-dd')
and oh.confirm_date<to_date('${endDatre}','yyyy-mm-dd')+1
group by 分公司编码,分公司名称,经营部编码,经营部名称
3.展示界面的设置
一点点写比较麻烦,我就直接截图了,如下图所示

4.最后,访问的时候需要在url后面加上参数op=sheet
分享扩散:

沙发
发表于 2018-7-5 17:07:57
大神666666
板凳
发表于 2018-7-19 18:30:33
大神6666
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

2回帖数 1关注人数 5166浏览人数
最后回复于:2018-7-19 18:30

返回顶部 返回列表