RT 同一个表里
表A
ID NAME VAL MONTH
1 S 33 08
2 B 44 09
3 B1 55 09
4 S1 66 08 这个表结构是这样 我想在同一个表里 的 8月份的值VAL 全部替换成9月份的值 是全部更新 里边数据很多 这只是举例子 怎么写这个语句呢 高手回答马上结贴 在线等
表A
ID NAME VAL MONTH
1 S 33 08
2 B 44 09
3 B1 55 09
4 S1 66 08 这个表结构是这样 我想在同一个表里 的 8月份的值VAL 全部替换成9月份的值 是全部更新 里边数据很多 这只是举例子 怎么写这个语句呢 高手回答马上结贴 在线等
解决方案 »
- 安装时oracle9i出现的奇怪问题,
- hibernate 语句写法
- 遇到性能问题
- 数据库表有新内容插入时,如何通知前台程序
- 在redhat linux9.2下启动oracle10的一个问题,很急,请各位大侠纸指点.
- 数据表中存放对员工的打分情况,想统计各员工的平均分值。请问该SQL语句如何写?
- 版主本人绝无恶意放分,帖子地址如下,特别hooyke(红旗下的蛋)sflight(飞) bluemeteor(挂月||╭∩╮(︶_︶)╭∩╮)
- 问一个java stored procedure的疑惑问题!
- 急!用户表的信息存储在哪张表上?我想取得所有表的表名,和表的所有字段名,以及字段的数据类型。
- 老师让建一个connect的服务,不是用easy config建么?在线等待
- 100高分,在现急等:LINUX下ORACLE字符集问题
- 在哪里可以配置ORACLE的最大游标数?
你的数据需要调整,比如相邻两行数据要么08月的统一在前,要么统一在后,不能有前有后,否则,太麻烦.
假如08的统一在前,可以用下面的方法:
CREATE TABLE tt (ID INT ,NAME VARCHAR2(10),val INT,MONTH VARCHAR2(2));INSERT INTO TT VALUES (1, 'S', 33, '08');
INSERT INTO TT VALUES (2, 'B', 44, '09');
INSERT INTO TT VALUES (3, 'B1', 55, '08');
INSERT INTO TT VALUES (4, 'S1', 66, '09');
SELECT * FROM tt;
SELECT t.id,lead(val) over(ORDER BY ID) v9 FROM tt t;
UPDATE TT
SET VAL = (SELECT V9
FROM (SELECT T.ID, LEAD(VAL) OVER(ORDER BY ID) V9 FROM TT T) N
WHERE TT.ID = N.ID)
WHERE MONTH = '08';
2 B 44 09 => 2 B 33 09
3 B1 55 09 => 3 B1 66 09
4 S1 66 08 4 S1 66 08
SET VAL = (SELECT V9
FROM (SELECT T.ID, LEAD(VAL) OVER(ORDER BY ID) V9 FROM TT T) N
WHERE TT.ID = N.ID)
哦 楼上的 看错了 我以为WHERE TT.ID = N.ID的这个条件是 子查询限制呢 但是有问题就是我的表是早就有的了 排序不可能按照楼上说的那样 有好方法能搞定么 楼上方法 可行但是有限制 给楼上结贴 30分谢谢楼上的帮忙 还有70分 那个高手帮忙啊
修改下就没有限制了.试试吧.UPDATE TT
SET VAL = (SELECT DECODE(MOD(RD, 2), 1, V9, 0, V7)
FROM (SELECT ID, ROWNUM RD, V9, V7
FROM (SELECT T.ID,
LEAD(VAL) OVER(ORDER BY ID) V9,
LAG(VAL) OVER(ORDER BY ID) V7
FROM TT T
ORDER BY ID)) N
WHERE TT.ID = N.ID)
WHERE MONTH = '08';
表A
ID NAME VAL MONTH
1 S 33 08
2 B 44 09
3 B1 55 09
4 S1 66 08 这个表结构是这样 我想在同一个表里 的 8月份的值VAL 全部替换成9月份的值 是全部更新 第1条记录,是要改成记录2,还是记录3,还是别的条件呢?根据ID,NAME,还是说找最近的ID?