我在sql serevr中有一个表,它有一列并且存储整数值。
Ex:ColumnData
100
150
20
25
300
现在通过使用这些数据我想得到如下所示的结果。
columndata NewColumn
100 100
150 250
20 270
25 295
300 595
所以在输出中newcolumn是由逻辑添加的,即第一行数据为第一行,然后前两行加法结果如第二行所示,然后前三行加法结果如第三行所示......如此... / p>
任何人都可以向我提供如何获得我的结果的查询。
先谢谢,
Phani Kumar。
答案 0 :(得分:1)
假设您有一个可以按顺序排序数据的列,则可以使用窗口化聚合函数(这适用于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
答案 1 :(得分:0)
您需要使用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
答案 2 :(得分:0)
以萨尔为( 从empmaster选择a.empid,salry,row_number()over(empid命令)rn 选择a.empid,a.salry,b.salry,a.salry + b.salry 来自萨尔 左外连接sal b在a.rn = b.rn-1
上