免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2877 | 回复: 4
打印 上一主题 下一主题

求一更新表的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-31 22:19 |只看该作者 |倒序浏览
现有一张表,内容大致如下:

id       amount              version
1        50                       0
1        150                     1
1        200                     2
2        20                       1
2        50                       2
3        100                     0
3        200                     1
3        400                     2
3        800                     3

想更新成:

id       amount              version
1        1                         0
1        51                       1
1        151                     2
2        1                         1
2        21                       2
3        1                         0
3        101                     1
3        201                     2
3        401                     3

针对每一个分类(id),会有不同的version,以及相应的amount。现在想要根据对每一个分类,找到其version最小的一行,将其amount设为1;当version为第二小的,将amount设为version最小时的amount加1,以此类推。

希望大家各抒己见,看看有没有好的办法实现。

论坛徽章:
0
2 [报告]
发表于 2007-11-01 09:12 |只看该作者
用存储过程

论坛徽章:
0
3 [报告]
发表于 2007-11-01 09:16 |只看该作者
能不能给点提示,我不会写informix的存贮过程。

论坛徽章:
0
4 [报告]
发表于 2007-11-01 14:49 |只看该作者
原帖由 sunbin1113 于 2007-11-1 09:16 发表
能不能给点提示,我不会写informix的存贮过程。


这个应该查阅相关书籍,不用存储过程可以用编程序的方法,比如esql/c等,但要用游标。

论坛徽章:
0
5 [报告]
发表于 2007-11-01 14:58 |只看该作者
我自己写一个过程,但是运行不了,麻烦看看:

create procedure upstaf()
define v_id integer;
define v_s integer;
define v_m integer;

begin work;

foreach cur_id for select staffnr into v_id from staf where firma=1 group by staffnr;
select min(seilands),max(seilands) into v_s,v_m from staf where firma=1 and staffnr=v_id;
for i in v_s to v_m
if i=v_s then
insert into my_staff values(v_id,1,i);
amount_last=select amount from staf where firma=1 and seiland=i and staffnr=v_id;
else
insert into my_staff values(v_id,amount_last+1,i);
amount_last=select amount from staf where firma=1 and seiland=i-1 and staffnr=v_id;
end if;
end for;
end foreache;
commit work;
end procedure;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP