SQL 服务器更新查询以添加总计

SQL server update query to add totals

我有一个 table 如下:

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

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

如果您可以使用行号作为参考,那么您可以尝试以下查询,但如评论中所述,将总计存储在 table 中是个坏主意:

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

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

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

这只是一种方法(不一定是最好的)。我建议您 google 'Running totals in SQL' 并熟悉此方法和其他方法的解释,它们各自的优缺点和性能影响。 一个问题,您使用的 SQL 服务器是什么版本?

如果你想使用触发器(不推荐),你可以使用这个:

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