日期:2014-05-17  浏览次数:20689 次

求高效的 SqL2000 字传值逐行累计方法
本帖最后由 LzLlzl001 于 2013-05-14 13:58:05 编辑
有如下1张表(表名:T1,id字段为索引)

 Id   A    wg
 1    1
 2    3 
 3    6
 .    .
 .    .
求更新成
 id    A   wG
 1    1    1
 2    3    4
 3    6   10

   我试过这条语句(update t1 set hg=(select sum(a) from t1 t2 where t2.Id<=t1.id )
)能达到想要的效果,而且也简单明了。但速度太慢,2000条记录要约半分钟,求有没其它方法达到效果和速度的统一。
SqL2000?字传值逐行累计方法 SQL

------解决方案--------------------
试试这种要多久

DECLARE @i INT =0
UPDATE tb SET [wg]=@i,@i=@i+[A]
------解决方案--------------------
说实话,我也只能想到这样的,而且它是SQL2000
------解决方案--------------------
如果只更新一次,那么先插入一个临时表,然后清空源表,再把临时表的数据插回去就可以了
----------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-05-14 14:03:53
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
-- Jun 17 2011 00:54:03 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------
--> 测试数据:[T1]
if object_id('[T1]') is not null drop table [T1]
go 
create table [T1]([Id] int,[A] int)
insert [T1]
select 1,1 union all
select 2,3 union all
select 3,6
--------------开始查询--------------------------

select *,wg=(SELECT SUM(A) FROM [T1] WHERE a.id>=id) 
from [T1] a
----------------结果----------------------------
/* 
Id          A           wg
----------- ----------- -----------
1           1           1
2           3           4
3           6           10
*/