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

时间:2015-05-11 16:38:50

标签: sql sql-server

我在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。

3 个答案:

答案 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

Sample SQL Fiddle

答案 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

相关问题