繁体   English   中英

将前两行相加作为第二行,然后将前三行相加作为第三行,依此类推

[英]Adding first two rows result as a second row then addition of first three rows result as a third row and so on

我在sql serevr中有一张表,该表有一列,它存储整数值。

例如:ColumnData


   100

   150

   20

   25

   300

现在,通过使用此数据,我希望得到如下所示的结果。

columndata NewColumn


   100        100

   150        250

   20         270

   25         295

   300        595

所以在输出新列中通过逻辑即第一行数据作为第一行相加,然后将前两行相加结果显示在第二行中,然后将前三行相加结果显示在第三行中,依此类推...

谁能给我查询如何得到我的结果。

提前致谢,

Phani Kumar。

假设您有一个可以对数据进行排序的列,则可以使用窗口聚合函数(适用于SQL Server 2012+)或自连接(适用于任何版本)来计算运行总计。 如果您没有任何要排序的列,则根本无法以确定性的方式进行。

-- sample table:
create table t (id int identity(1,1), ColumnData int)
insert t values (100),(150),(20),(25),(300)

-- query 1 using windowed aggregate
select ColumnData, sum(ColumnData) over (order by id) as  NewColumn
from t order by id

-- query 2 using self-join    
select t1.ColumnData, sum(t2.ColumnData) as  NewColumn
from t t1
join t t2 on t2.id <= t1.id
group by t1.id, t1.ColumnData
order by t1.id

示例SQL提琴

您需要使用PL SQL来执行此操作。 更改表以使其具有要排序的新字段id ,并使value2具有最终结果。

DECLARE
 l_last_sum       INTEGER := 0;

 CURSOR test_cur
 IS
      SELECT id,value
        FROM test
    ORDER BY id ASC;

 l_test   test_cur%ROWTYPE;
BEGIN
 OPEN test_cur;

 LOOP
    FETCH test_cur INTO l_test;
    EXIT WHEN test_cur%NOTFOUND;

    l_last_sum:=l_last_sum+l_test.value;
    update test set value2=l_last_sum where id=l_test.id;

 END LOOP;

 CLOSE test_cur;
END; 



  SQL> select * from test;                                                                                

    ID      VALUE     VALUE2                                                                        
 ---------- ---------- ----------                                                                        
     1        100        100                                                                        
     2         25        125                                                                        
     3         40        165 

从sal的as作为as(选择a.empid,salry,row_number()超过(按empid排序)rn)从empmaster中选择a.empid,a.salry,b.salry,a.salry + b.salry从sal左外部在a.rn = b.rn-1上加入sal b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM