日期:2014-05-18 浏览次数:20599 次
SQLServer语法(要求不使用游标)
单表T
字段 a(int) b(int) c(int) d(int)
1 0 0 10
2 10 5 Null
3 20 10 Null
4 30 15 Null
a字段自增,所需结果如下
字段 a(int) b(int) c(int) d(int)
1 0 0 10
2 10 5 15
3 20 10 25
4 30 15 40
过程 根据a自增, 累加d(初始为10) d=d+(b-c)
单语句Update如何写
if object_id('tempdb..#tmp') is not null
drop table #tmp
GO
create table #tmp(a int,b int,c int , d int)
insert #tmp
select 1,0 ,0 ,10 union all
select 2,10,5 ,null union all
select 3,20,10,null union all
select 4,30,15,null
update #tmp
set d=(select isnull(sum(b-c),0)
from #tmp TT
where TT.a <=#tmp.a)+(select d from #tmp where a=1)
select * from #tmp
drop table #tmp
a b c d
----------- ----------- ----------- -----------
1 0 0 10
2 10 5 15
3 20 10 25
4 30 15 40
(所影响的行数为 4 行)
有表
商品 收入 发出 结存
月初数 10
a 5 0
b 0 2
如何用update 语句更新结存数,结存数为上一行的结存+本行的收入-本行的发出
如上表中a的结存为15,b的结存为13
要求:不用游标,尽量不用循环,只用一句话
if object_id('pubs..tb') is not null
drop table tb
go
create table tb
(
商品 varchar(10),
收入 int,
发出 int,
结存 int
)
insert into tb(商品,收入,发出,结存) values('月初数',null,null,10)
insert into tb(商品,收入,发出,结存) values('a',5,0,0)
insert into tb(商品,收入,发出,结存) values('b',0,2,0)
update tb
set 结存=(select isnull(sum(收入-发出),0)
from tb tt
where tt.商品 <=tb.商品 and tb.商品 <>'月初数')+(select 结存 from tb where 商品='月初数')
select * from tb
drop table tb
商品 收入 发出 结存
---------- ----------- ----------- -----------
月初数 NULL NULL 10
a 5 0 15
b 0 2 13
(所影响的行数为 3 行)
create table #aa( fi