求高效率的 SqL2000 字传值逐行累计方法
求高效的 SqL2000 字传值逐行累计方法
有如下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条记录要约半分钟,求有没其它方法达到效果和速度的统一。
------解决方案--------------------
试试这种要多久
DECLARE @i INT =0
UPDATE tb SET [wg]=@i,@i=@i+[A]
------解决方案--------------------
说实话,我也只能想到这样的,而且它是SQL2000
------解决方案--------------------
如果只更新一次,那么先插入一个临时表,然后清空源表,再把临时表的数据插回去就可以了
有如下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
*/