我在用 oracle 写函数的时候有这么一段语句
declare a recode; --声明一个记录类型变量
declare sum numeric; --声明一个numeric类型变量
begin
sum=0;
for a in select id,name,num from table --循环,此处a只取一条记录
loop
sum=sum+a.num; --累加
a.num=sum; --把值赋给该记录的num列
return next a; --返回该行
end loop; --获取select id,name,num from table下一条记录,直到记录遍历结束
return;
end;
这段语句是用循环遍历结果集计算后返回请问在sql中如何做到? 不可使用游标
declare a recode; --声明一个记录类型变量
declare sum numeric; --声明一个numeric类型变量
begin
sum=0;
for a in select id,name,num from table --循环,此处a只取一条记录
loop
sum=sum+a.num; --累加
a.num=sum; --把值赋给该记录的num列
return next a; --返回该行
end loop; --获取select id,name,num from table下一条记录,直到记录遍历结束
return;
end;
这段语句是用循环遍历结果集计算后返回请问在sql中如何做到? 不可使用游标
declare @num decimal(18,2)
set @num=0
update [table]
set num=@num,@num=@num+num
00001 番茄酱 包 100 0
00001 番茄酱 包 20 0
00001 番茄酱 包 10 0
得到结果 00001 番茄酱 包 100 100
00001 番茄酱 包 20 120
00001 番茄酱 包 10 130 1不能用游标(因为效率不好)
2不能用identity 因为已经有一个,且原表中的identity列在经过排序后肯定会被打乱,因而是不能用的.
pid pname pw num sum
00001 番茄酱 包 100 0
00001 番茄酱 包 20 0
00001 番茄酱 包 10 0declare @num decimal(18,2)
set @num=0
update [table]
set @num=@num+num,sum=@num
insert A select '00001', '番茄酱', '包', 100
union all select '00001', '番茄酱', '包', 20
union all select '00001', '番茄酱', '包', 10
select ID=identity(int, 1, 1),* into #T from Aselect *, col5=(select sum(col4) from #T where ID<=A.ID) from #T as A--result
ID col1 col2 col3 col4 col5
----------- ----- ---------- ---------- ----------- -----------
1 00001 番茄酱 包 100 100
2 00001 番茄酱 包 20 120
3 00001 番茄酱 包 10 130(3 row(s) affected)drop table A
drop table #T
感谢你的帮助,不过我要查询不是修改,呵呵。
to:marco08(天道酬勤)
临时表可以 但是不能有identity列(因为已经有一个了,且原表中的identity列在经过排序后肯定会被打乱,因而是不能用的.) 这个怎么写?