2014-01-19 60 views
1

该更新领域我有如下表(表1):TSQL更新查询,在运行

+----+-----+ 
|Type|Value| 
+----+-----+ 
|P |4 | 
+----+-----+ 
|P |20 | 
+----+-----+ 
|S |0 | 
+----+-----+ 
|S |0 | 
+----+-----+ 
|S |0 | 
+----+-----+ 

我运行下面的查询:

update Table1 set value = (select sum(value) FROM Table1) where Type = 'S' 

结果将是24对所有字段的值='S'

我需要的是考虑在运行时更新的值。 结果,我需要:

+----+-----+ 
|Type|Value| 
+----+-----+ 
|P |4 | 
+----+-----+ 
|P |20 | 
+----+-----+ 
|S |24 | 
+----+-----+ 
|S |48 | 
+----+-----+ 
|S |96 | 
+----+-----+ 

这是如何可以在一个简单的查询?

谢谢你,

+0

试试 “运行总计SQL服务器” 解决方案寻找。无可否认,你的特殊问题有一点小小的变化,但总的来看似乎是中心主题。 –

回答

1

DECLARE @ID int
DECLARE cur CURSOR local select ID from table1 where Type = 'S'
FETCH cur into @ID
WHILE @@FETCH_STATUS=0
BEGIN
update Table1 set value = (select sum(value) FROM Table1) where [email protected]
FETCH cur into @ID
END
Close cur
DEALLOCATE cur

+0

谢谢你的回答。我使用了游标方法。但是,当在一张巨大的桌子上使用光标时,这会调用关键性能。有没有其他可能的解决方案? – user3211685