先看看效果:
报表软件: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