我有一张表格如下:
第一个记录Amount和TotalAmount相同
在第二个记录中,金额从第一行添加,当前和添加了TotalAmount
依旧......
现在,如果我将第二行从1.25更新为2,则应更改所有后续记录的TotalAmount。
我需要更新查询。
我有seq_no和行号作为参考,字段类型是参考
答案 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