如下,表ly_aNUM REMARK
1 集团
1 用户
3 集团
做了以下操作后变为update ly_a a set a.re=(select b.re||a.re from ly_a b 
where a.num=b.num and a.re='集团' and b.re='用户' )
where a.re='集团'NUM REMARK
1 用户集团
1 用户
3
第三行被清空了,我原本的意思是合并前两行数据为1行

NUM REMARK
1 集团用户
3 集团

解决方案 »

  1.   

    update ly_a a set a.re=(select b.re ¦ ¦a.re from ly_a b  
    where a.num=b.num and a.re='集团' and b.re='用户' ) 
    where a.num=1这样应该会出现3行
    NUM REMARK 
    1 集团用户 
    1 集团用户 
    3 集团如果一定要合并的话,应该要删除重复记录或者INSERT到新表
      

  2.   

    with a as (
    select  1 NUM ,'集团' REMARK  from dual
    union 
    select  1 NUM ,'用户' REMARK  from dual
    union 
    select  3 NUM ,'集团' REMARK  from dual
    )select replace(wmsys.wm_concat(REMARK),',','') REMARK,NUM 
    from a
    group by NUM
      

  3.   

    a.num=1是可以的,但为什么a.re='集团' 第三条的re就被删掉了呢?
      

  4.   

    楼主和1楼写的sql没有普遍性,都写死了,还不如直接去改数据了,用2楼这个可以放到其他表里
      

  5.   


    因为这个a.num=b.num,关联不上被置空了
      

  6.   


    分解我的sql语句
    update ly_a a set a.re=(select b.re ¦ ¦a.re from ly_a b  
    where a.num=b.num and a.re='集团' and b.re='用户' ) 
    where a.re='集团' 其中select b.re ¦ ¦a.re from ly_a b  ,ly a
    where a.num=b.num and a.re='集团' and b.re='用户'出来的应该是
    B.REMARK||A.REMARK
    用户集团再做update ly_a set a.re='用户集团' where a.re='集团'所以结果应该是
    NUM REMARK
    1 用户集团
    1 用户
    3 用户集团而不应该把第3行的re置空吧???
     
      

  7.   

    UPDATE LY_A A
       SET A.REMARK = (SELECT A.REMARK||B.REMARK
                       FROM LY_A B
                      WHERE A.NUM = B.NUM
                        AND A.REMARK = '集团'
                        AND B.REMARK = '用户')
     WHERE A.REMARK = '集团'
     AND EXISTS (SELECT 1
                       FROM LY_A B
                      WHERE A.NUM = B.NUM
                        AND A.REMARK = '集团'
                        AND B.REMARK = '用户');
    这样写就对了
      

  8.   

    其实你8楼的拆分不正确,从最外层来看你要更新第1和3条数据,再去管理内层,其实是出来一个结果集,{用户集团,null},所以更新的时候就将3置空了
    A          B
    1 集团      1  集团 
    1 用户      1  用户 
    3 集团      3  集团