2014-06-24 38 views
0

我想用jasperreports做一份報告,彙總我們本月的合約,但將所有新舊合同添加到月。數據庫是一個mysql數據庫。 我的選擇是這樣的下面的示例數據:如何在jasper報告中累計(總和)超過一個月的價值(每月應該是前一個月的總和)

SELECT month(contract_date), amount 
FROM contracts 
WHERE year(contract_date)=2013 
GROUP BY month(contract_date) 

1.1.2013 300 
1.1.2013 500 
1.2.2013 250 
1.3.2013 250 

現在我得到:

1 800 
2 250 
3 250 
... 

但我想有:

1 800 
2 1050 
3 1300 
... 

所以每個月含有量在所有月份之前。

我不介意如果我可以在SQL或jasperreports/iReport中做到這一點,所以任何解決方案是值得歡迎的。 有什麼辦法可以做到這一點?

回答

1

MySQL沒有CTE這是不方便的,但一個觀點會在一個捏。

create view MonthlyTotals as 
    select Month(ContractDate) as ContractMonth, Sum(ContractQty) as TotalQty 
    from contracts 
    group by ContractMonth; 

現在我們可以加入觀與自身,保持運行總計每月的和以前的所有月份:

select t1.ContractMonth, t1.TotalQty, Sum(t2.TotalQty) as RunningTotal 
from MonthlyTotals t1 
join MonthlyTotals t2 
    on t2.ContractMonth <= t1.ContractMonth 
group by t1.ContractMonth; 

輸出符合您的需求輸出,在SQL Fiddle看到。

+0

謝謝,那很好。要做到這一點,而不創建一個視圖,似乎我可以使用內聯查詢: _select t1.ContractMonth,t1.TotalQty,Sum(t2.ContractQty)as RunningTotal from(select Month(ContractDate)as ContractMonth,總和(ContractQty)作爲TotalQty 從合同 組由ContractMonth)T1 加入合同上月(t2.ContractDate T2)<= t1.ContractMonth 組由t1.ContractMonth; _ – Gunni