先看看效果:

報表軟件: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