属性 值        月           状态          相差
L1000 NULL       1           DOWN       0.00399801587301587
L1000 NULL       1           ENGR      NULL
L1000 NULL       1           IDLE      NULL
L1000 NULL       1           PM      NULL
L1000 NULL       1           PROD (Charge)   -9.39055654761903L1000 NULL       7           DOWN       0.00399801587301587
L1000 NULL       7           ENGR      NULL
L1000 NULL       7           IDLE      5.98
L1000 NULL       7           PM      NULL
L1000 NULL       7           PROD (Charge)   -9.39055654761903
同样的属性,值,月,状态,唯独相差不同,我想把 7月份的  【相差】,赋值给1月份,如何处理,我用了left join处理
  select  a.属性,a.值,a.月,a.状态,b.相差
 (select  属性,值,月,状态,相差 from 表)a
 left join
 (select  属性,值,月,状态,相差 from 表)b
 on a.属性=b.属性 and a.值=b.值 and a.月=b.月 and a.状态=b.状态
由于数据量多,会出现少数数据,没有对应到相应的位置

解决方案 »

  1.   

    --查询:
    select a.属性,a.值,a.月,a.状态,(case when a.月=1 when b.相差 else a.相差 end)相差
    from 表 a inner join 表 b on a.状态=b.状态
      

  2.   

    --更新:
    update a set 相差=b.相差
    from 表 a inner join 表 b on a.状态=b.状态
    where a.月=1 and b.月=7
      

  3.   

     (select  属性,值,月,状态,相差 from 表 where 月=1)a
     left join
     (select  属性,值,月,状态,相差 from 表 where 月=7)b
      

  4.   

    update
     a 
    set
     相差=b.相差
    from
     a inner join b on a.状态=b.状态
    where
     a.月=1 and b.月=7