2015-02-12 38 views
-1

我有一個關於oracle sql的簡單問題。所以我有這個表在ORACLE SQL中向後查詢數據

WEEKNUM DATA 
1  10 
2  4 
3  6 
4  7 

所以我想做出一個觀點,即這樣表示,

WEEKNUM DATA ACCUM_DATE 
1  10 10 
2  4 14 
3  6 20 
4  7 27 

我花時間在這簡單的一個,但不可能得到任何運氣

非常感謝

回答

2
SELECT weeknum, 
     data, 
     sum(data) over (order by weeknum) accum_data 
    FROM your_table_name 

應該工作。我在此處使用sum分析函數,並假設您希望以最小的weeknum值開始並隨着weeknum值的增加繼續增加運行總數。我還假設你永遠不想重置累計總和。如果您正在嘗試執行類似於每年重新啓動的累計和的操作,則需要將partition by添加到分析功能中。

2

你可以在這種情況下使用Cross JOin

查詢:

select 
A.WEEKNUM 
, A.DATA 
, SUM(B.DATA) DA 
from table1 A 
cross join table1 B 
WHERE A.WEEKNUM>=B.WeekNUM 
GROUP BY A.WEEKNUM 
, A.DATA 
order by A.WEEKNUM 

結果:

WEEKNUM DATA DA 
1 10 10 
2 4 14 
3 6 20 
4 7 27 
1

謝謝你們,但我只是發現了這種方法效果很好,

OVER (ORDER BY WEEKNUM ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CUMULATIVE_WEIGHT 
0

或使用子選擇來計算:

select WEEKNUM, DATA, (select sum(DATA) from tablename t2 
         where t2.weeknum <= t1.weeknum) as ACCUM_DATE 
from tablename t1