本帖最后由 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
|