求高手指点SQL问题

天边一坨浮云 技术中心总经理  2011-02-18 06:03:19
临时表#t在存储过程中某一步之后数据如下
行号 Num1 Num2
1 5
2 6
3 5
4 8
5 0

希望通过update #t 使Num2的每一行都等于前面行所有Num1的和

即希望得到的结果是:
行号 Num1 Num2
1 5 5
2 6 11
3 5 16
4 8 24
5 0 24

求update 语句
...全文
88 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
解决了,谢谢
回复
Shawn 2011-02-18
[code=SQ]create table #temp
(
rowno int identity,
Num1 int,
Num2 int
)
insert #temp(Num1)
select 5 union all
select 6 union all
select 5 union all
select 8 union all
select 0

declare @sum int
set @sum = 0
update #temp
set Num2 = @sum,
@sum = @sum + Num1[/code]
回复
快溜 2011-02-18
[code=SQ]
update a set Num2 = (select sum(Num1) from tb where 行号 <=a.行号) from tb a
[/code]
回复
Linares 2011-02-18
啊哈 CSDN升级又升出问题了
回复
Linares 2011-02-18
[code=SQ]--> 测试数据:#t
if object_id('tempdb.dbo.#t') is not null drop table #t
create table #t(行号 int, Num1 int, Num2 varchar(8))
insert into #t
select 1, 5,null union all
select 2, 6,null union all
select 3, 5,null union all
select 4, 8,null union all
select 5, 0,null

update t set Num2 = (select sum(Num1) from #t where 行号<=t.行号) from #t t

select * from #t

/*
行号 Num1 Num2
----------- ----------- --------
1 5 5
2 6 11
3 5 16
4 8 24
5 0 24
*/
[/code]
回复
Linares 2011-02-18
[code=SQ]--> 测试数据:#t
if object_id('tempdb.dbo.#t') is not null drop table #t
create table #t(行号 int, Num1 int, Num2 varchar(8))
insert into #t
select 1, 5,null union all
select 2, 6,null union all
select 3, 5,null union all
select 4, 8,null union all
select 5, 0,null

update t set Num2 = (select sum(Num1) from #t where 行号<=t.行号) from #t t

select * from #t

/*
行号 Num1 Num2
----------- ----------- --------
1 5 5
2 6 11
3 5 16
4 8 24
5 0 24
*/
[/code]
回复
发动态
发帖子
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
社区公告
暂无公告