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月份的值 是全部更新 里边数据很多 这只是举例子 怎么写这个语句呢 高手回答马上结贴 在线等

解决方案 »

  1.   

    是PL/SQL 语句 谢谢 忘了写了刚才
      

  2.   

    意思就是 把08月里边的VAL 字段的值全部更新到 09月里边的VAL 字段里边 就行
      

  3.   


    你的数据需要调整,比如相邻两行数据要么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';
      

  4.   

    楼主是不是想要这种效果?1  S   33  08     1  S   33  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
      

  5.   

    08月份跟09月份的name是怎么关联更新的啊?
      

  6.   

    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 TT.ID = N.ID的这个条件是 子查询限制呢   但是有问题就是我的表是早就有的了 排序不可能按照楼上说的那样 有好方法能搞定么 楼上方法 可行但是有限制  给楼上结贴  30分谢谢楼上的帮忙  还有70分 那个高手帮忙啊
      

  7.   


    修改下就没有限制了.试试吧.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';
      

  8.   

    你更新总有逻辑可循吧,比如你的例子
    表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?