求高效的 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
*/