SQL Server更新查询以添加总计

时间:2015-01-12 09:12:06

标签: sql sql-server

我有一张表格如下:

  • 第一个记录Amount和TotalAmount相同

  • 在第二个记录中,金额从第一行添加,当前和添加了TotalAmount

  • 依旧......

现在,如果我将第二行从1.25更新为2,则应更改所有后续记录的TotalAmount。

我需要更新查询。
我有seq_no和行号作为参考,字段类型是参考

enter image description here

3 个答案:

答案 0 :(得分:0)

如果您可以使用行号作为参考,那么您可以尝试以下查询,但在表格中存储总计是错误的想法,如评论中所述:

DECLARE @Temp TABLE
(   
    Amount float,
    TotalAmount float,
    Rownum int
)

INSERT INTO @Temp VALUES (1.25,1.25,1),(1.25,2.50,2),(10,12.50,3)

DECLARE @PreviousAmount AS FLOAT
SELECT @PreviousAmount = Amount FROM @Temp WHERE Rownum=1

DECLARE @NewAmount AS FLOAT = 2

UPDATE @Temp SET TotalAmount = TotalAmount - @PreviousAmount WHERE Rownum>=1
UPDATE @Temp SET Amount=@NewAmount, TotalAmount = TotalAmount + @NewAmount WHERE Rownum=1
UPDATE @Temp SET TotalAmount = TotalAmount + @NewAmount WHERE Rownum>1

SELECT * FROM @Temp

答案 1 :(得分:0)

理想情况下,您应该创建一个执行运行总计的视图或存储过程,这是使用子查询的一个方法的示例:

SELECT 
    Type,
    Amount , 
    Total = 
    (
           SELECT SUM(Amount) 
           FROM SomeTable B 
           WHERE B.Type=A.Type AND B.RowNum <= A.RowNum
    )
FROM SomeTable A

这只是一种方法(不一定是最好的方法)。我建议你google&#39;在SQL中运行总计&#39;并熟悉这个和其他方法的解释,每个方法的优缺点和性能影响。 一个问题,你使用的是什么版本的SQL服务器?

答案 2 :(得分:0)

如果你想使用触发器(不推荐使用)。你可以使用它:

create trigger trigger_name
for update
 as

declare @count int= (select count(*) from table)
declare @a int =1


while(@a<@count)
begin
update table
set total_amount=(select amount from table where row_number=@a) + (select  amount from table           where row_number=@a-1 )
 where row_number!=1
 set @a=@a+1
 end

 Go