2015-02-12 69 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