Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于添加每行值的sql函数_Sql_Oracle_Cursor_Procedure_Func - Fatal编程技术网

用于添加每行值的sql函数

用于添加每行值的sql函数,sql,oracle,cursor,procedure,func,Sql,Oracle,Cursor,Procedure,Func,表a id 1 2 3 4 我希望输出如下所示: id id_new 1 1 2 3 3 6 4 10 基本上,我们是在每行中添加一列的行值 i、 E2=1+2,3=1+2+3等等 您可以使用任何光标、函数或查询您似乎想要一个累计总和。ANSI标准函数是Oracle支持的窗口函数: select id, sum(id) over (order by id) as id_new from t; 不过,使用名为id的列执行此操作似乎很奇怪。通常,累计金额是以计数、金额或可测量

表a

id
1
2
3
4
我希望输出如下所示:

id id_new
1   1
2   3 
3   6
4   10
基本上,我们是在每行中添加一列的行值 i、 E2=1+2,3=1+2+3等等
您可以使用任何光标、函数或查询

您似乎想要一个累计总和。ANSI标准函数是Oracle支持的窗口函数:

select id, sum(id) over (order by id) as id_new
from t;
不过,使用名为id的列执行此操作似乎很奇怪。通常,累计金额是以计数、金额或可测量的东西为基础的

如果需要实际更新数据,则可以使用相关子查询:

update t
    set id_new = (select sum(id) from t t2 where t2.id <= t.id);
这在一张小桌子上可以用。对于任何更大的问题,请使用merge.

小菜一碟

SQL> with test (id) as
  2  (select 1 from dual union
  3   select 2 from dual union
  4   select 3 from dual union
  5   select 4 from dual
  6  )
  7  select id, sum(id) over (order by id) id_new
  8  from test
  9  order by id;

        ID     ID_NEW
---------- ----------
         1          1
         2          3
         3          6
         4         10

SQL>
[编辑,通用选项]


Pradeep的评论可能是对甲骨文的评论。但还有一种替代方法,即使用相关子查询来计算滚动和:

SELECT
    id,
    (SELECT SUM(t2.id) FROM yourTable t2 WHERE t2.id <= t1.id) id_new
FROM yourTable t1;

这个答案可能有一些优点,因为不是每个数据库都支持分析功能。即使我们在Java应用程序的上下文中使用Oracle,像JPA或Hibernate这样的ORM接口也可能不支持分析功能。

sumidoverorder by idha ha+1解码我的名字@Pரதீப் 我知道是你,因为以前你的名字不在泰米尔语中,我知道一些泰米尔语,因为我的大多数同事都是泰米尔人:-。让它成为一个广义的查询,对于1,2,3…你去哪里,@sheetal
SELECT
    id,
    (SELECT SUM(t2.id) FROM yourTable t2 WHERE t2.id <= t1.id) id_new
FROM yourTable t1;