1.根据表AA中【OYA_BI】和【BI】 列关联更新列【OYA_NAME】的值
UPDATE AA SET OYA_NAME=
        (SELECT  DISTINCT A.NAME  FROM AA A WHERE RTRIM(OYA_BI)=RTRIM(A.BI) )
不起作用,执行完,NAME列都为空,而实际上OYA_BI和BI能关联到数
-------------------
BI  NAME  OYA_BI  OYA_NAME
SS  BING   CC
CC  ABCD   DD关联结果:
BI  NAME  OYA_BI  OYA_NAME
SS  BING   CC      ABCD
--------------------2. 将表AA中按KATAMEI,EDP_SKKR_SYK 分组KOTEI_FLOW_RNBN值最大的【ZB】列复制1。UPDATE AA  SET ZB='1'
FROM AA A, 
( SELECT KATAMEI,EDP_SKKR_SYK ,MAX(KOTEI_FLOW_RNBN)KOTEI_FLOW_RNBN FROM ALPSSHU2  
       GROUP BY KATAMEI,EDP_SKKR_SYK  ORDER BY KATAMEI, EDP_SKKR_SYK)B
WHERE A.KATAMEI=B.KATAMEI AND A.KOTEI_FLOW_RNBN=B.KOTEI_FLOW_RNBN AND A.EDP_SKKR_SYK=B.EDP_SKKR_SYK
怎么转化为ORACLE ,写不出来。谢谢各位大侠。

解决方案 »

  1.   

    第一个:   
    MERGE INTO AA T1 USING AA T2 ON(T1.OYA_BI=T2.BI) WHEN MATCHED THEN UPDATE SET T1.OYA_NAME=T2.NAME;第二个语句你可以仿照这个
      

  2.   

    第一个你把所有的列名前加上别名试试?公司没练习的server,不好测。
      

  3.   

    UPDATE AA A1
       SET OYA_NAME =
           (SELECT DISTINCT A.NAME
              FROM AA A2
             WHERE RTRIM(A2.OYA_BI) = RTRIM(A1.BI))
    UPDATE AA A
       SET ZB = '1'
     where exists (select 1
              from (SELECT KATAMEI,
                           EDP_SKKR_SYK,
                           MAX(KOTEI_FLOW_RNBN) KOTEI_FLOW_RNBN
                      FROM ALPSSHU2
                     GROUP BY KATAMEI, EDP_SKKR_SYK
                     ORDER BY KATAMEI, EDP_SKKR_SYK) B
             WHERE A.KATAMEI = B.KATAMEI
               AND A.KOTEI_FLOW_RNBN = B.KOTEI_FLOW_RNBN
               AND A.EDP_SKKR_SYK = B.EDP_SKKR_SYK)
      

  4.   

    谢谢,第2个已经OK了,但第1个还有点小问题。UPDATE AA A1    SET OYA_NAME =        (SELECT DISTINCT A.NAME          FROM AA A2          WHERE RTRIM(A2.OYA_BI) = RTRIM(A1.BI)) 执行报"单行子查询返回多个行",但是已经用了DISTINCT 了啊?
      

  5.   

    这说明满足条件的有多个值,distinct对这方面就没作用了,你只能在子查询中加多一些关联条件来过滤
      

  6.   

     这说明满足条件的有多个值,distinct对这方面就没作用了,你只能在子查询中加多一些关联条件来过滤是这么个意思。返回值不唯一
      

  7.   

    OYA_BI有重复的啊。。
    AA表中 OYA_NAME 与OYA_BI对应会有重复数据。
    这种怎么办啊?
    BI  NAME  OYA_BI  OYA_NAME
    SS  BING   CCCC  ABCD   DD
    EE  BING   CC
    关联结果:
    BI  NAME  OYA_BI  OYA_NAME
    SS  BING   CC      ABCD
    EE  BING   CC      ABCD
     
      

  8.   

    BI  NAME  OYA_BI  
    SS  BING   CC 
    CC  ABCD   DD
    EE  BING   CC关联结果:
    BI  NAME  OYA_BI  OYA_NAME
    SS  BING   CC      ABCD
    EE  BING   CC      ABCD
      

  9.   

    你举的例子不对,这样的情况用一方法是可以update的
    如果是:
    BI  NAME  OYA_BI  
    SS  BING  CC 
    CC  ABCD   DD
    cc  BING   bb关联结果:
    BI  NAME  OYA_BI  OYA_NAME
    SS  BING   CC      abcd or bing ?
      

  10.   

    实在不好意思 
    追加问题:需要设定JOB 每月最后一天17点执行,怎么设?
      

  11.   

    语句1已经解决了,加了 AND ROWNUM = 1就可以了,重复的CC对应的NAME是一样的,任取一条就行。
    -------------------------------------------------------------------------------------
    UPDATE AA A1    SET OYA_NAME = (SELECT DISTINCT A.NAME   FROM AA A2   WHERE RTRIM(A2.OYA_BI) = RTRIM(A1.BI) AND ROWNUM = 1) 
    -------------------------------------------------------------------------------
    谢谢大家啊。另外,我想建一个JOB 每月最后一天17点执行,怎么设?大家知道吗?
      

  12.   

    CREATE OR REPLACE PROCEDURE TEST2 IS
     BEGIN
       DROP TABLE AA;
       CREATE TABLE AA  AS 
       SELECT * FROM  ALPSSHU2 PDSHU WHERE ZB ='20FB品LOT END';
    END TEST2; 
    -------------------
    BEGIN
     TEST2;
    END;
    编译不成功?不知道为什么?
      

  13.   

    drop这种ddl不能直接执行,要EXECUTE immediate 'drop table aa';这样才行job 的话,网上搜下很多,我一般都用plsql developer的图形界面了,看着点就行了