[英]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
您需要使用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.