oracle数据库同一张表中一个字段值插入到另一个字段

表a中的字段分别是
id stat_cycle x_value y_value
1 201304 10
2 201305 09
3 201306 05
4 201307 21
5 201308 18
6 201309 99
通过stat_cycle字段把 201404的x_value值更新到201405y_value值中以此类推,
谢谢在线等
201404的x_value值更新到201405y_value
201405的x_value值更新到201406y_value
201406的x_value值更新到201407y_value
以此类推~因为我这边有个批量更新的数据,
这个能帮忙解答下吗?

可以通过insert into …… as select 语句来进行实现。
sql:insert into tablename(newname) as select oldname from tablename where 条件语句。
备注:以上语句中插入的字段顺序必须要和查询的语句的顺序保持一致,否则会报错,如果有条件语句的话,可以增加 where条件。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-13
update a ua set y_value=
(select y_value from (select id,x_value,lag(x_value)over(order by id) y_value from a ) sa
where ua.id=sa.id);
第2个回答  2014-05-13
update a set y_value =(select x_value from a where stat_cycle='201404') where stat_cycle ='201405';追问

201404的x_value值更新到201405y_value
201405的x_value值更新到201406y_value
201406的x_value值更新到201407y_value
以此类推~因为我这边有个批量更新的数据,
这个能帮忙解答下吗?

追答

批量更改的话,最好使用存储过程或者plsql循环语句。我给你写一个简单点的,你看着改改:
declare
i int ;
j int;
begin
i :='201404';
j :='201405';
for (i ='201404',i<=你要改的最大值,i+10)
update a set y_value =(select x_value from a where stat_cycle=i) where stat_cycle =j;
j=j+10;
end;
注意这个语句我没测试过,可能会有问题,大概思路是这样的,你试着修改测试一下。

本回答被提问者采纳