解决方案 »

  1.   

    1、你这是右连接,不是左连接
    2、就算左连接也不行,左联出来的结果中,无对应值的记录左连接得到的记录中,BEFORE_YEAR_VALUE值为空,也不能达到更新的目的
      

  2.   

    你先把它写成selec语句,先看看你连接的结果是什么样子的,看完你可能就知道怎么回事了
      

  3.   

    上午想了半个钟,不知道要怎么写出SELECT语句可以模拟更新的那种查询效果
      

  4.   

    SELECT  T.*,V.*,T.YEAR_BASIS_BAK  as 更新前的值,CASE
                     WHEN V.BEFORE_YEAR_VALUE = 0 THEN
                      0
                     WHEN  V.BEFORE_YEAR_VALUE IS NULL THEN
                      0
                     ELSE
                      (T.KPI_VALUE - V.BEFORE_YEAR_VALUE) / V.BEFORE_YEAR_VALUE
                   END AS 更新后的值
       FROM (
             SELECT  B.KPI_VALUE  BEFORE_YEAR_VALUE,
                     B.ORG_ID,
                     B.KPI_ID,
                     B.PROJECT_CATEGORY_ID
             FROM DM_TZJH_WCL B
             WHERE  B.CY_ID = '201304'
           ) V,(select * from DM_TZJH_WCL WHERE CY_ID = '201404') T
       WHERE  T.ORG_ID = V.ORG_ID (+)
       AND   T.KPI_ID = V.KPI_ID (+)
       AND  T.PROJECT_CATEGORY_ID = V.PROJECT_CATEGORY_ID (+)
      

  5.   

    THK,试了一下你发的SQL,出来的结果是0,没问题,也是我想要的结果,不过我的更新语句执行完却是空
      

  6.   

    猜测问题会不会是出在左关联的两个表的层级的问题,你的SQL中做关联的两个表示在同一个FROM 后面,更新语句是一个在外层,另一个表示在内层
      

  7.   

    我这语句和你的update是等价的,和层级没关系
      

  8.   

    你的子查询没有符合条件的记录,oracle默认子查询返回0行时,都将数据更新为空