如下两张表:需要用Temp_Submit_Data中的account列更新Temp_Calc_data中的column列.匹配规则是Temp_Submit_Data(mediasort)为01则用Temp_Submit_Data(account)更新Temp_Calc_data(column1),其他以此类推,希望有高手出来指点迷津(目前方法我也能想到但主要速度无法保证)
Temp_Submit_Data(primary key id,submitsort,mediasort)
id submitsort     mediasort account       
001 独生子女 03 400.00
001 职工本人 01 500.00
001 职工本人 02 500.00
002 独生子女 01 300.00
003 独生子女 01 100.00
003 独生子女 05 865.00
003 独生子女 06 40.00
003 职工本人 01 855.00
003 职工本人 02 36.00
003 职工本人 03 566.00
003 职工本人 04 765.00Temp_Calc_data(primary key id,submitsort)
id submitsort    column1  column2 column3 column4 column5 column6
001 独生子女       NULL     NULL    NULL     NULL    NULL  NULL
001 职工本人       NULL     NULL    NULL     NULL    NULL  NULL
002 独生子女       NULL     NULL    NULL     NULL    NULL  NULL
003 独生子女       NULL     NULL    NULL     NULL    NULL  NULL
003 职工本人       NULL     NULL    NULL     NULL    NULL  NULL

解决方案 »

  1.   

    update Temp_Calc_data a set  column1=(select account from Temp_Submit_Data b where a.id=b.id and b. mediasort='01')其它的列类推,写上6句就行了,我看要想一句写出来不太可能吧
      

  2.   

    先将你的Temp_Submit_Data表行列转换成Temp_Calc_data的格式就可以直接UPDATE了for example :SQL> select * from test_tab;ID         SUB_DESC             ACCOUNT
    ---------- -------------------- --------------------
    001        独生子女             03400.00
    001        职工本人             01500.00
    001        职工本人             02500.00
    002        独生子女             01300.00
    003        独生子女             01100.00
    003        独生子女             05865.00
    003        独生子女             0640.00
    003        职工本人             01855.00
    003        职工本人             0236.00
    003        职工本人             03566.00
    003        职工本人             04765.0011 rows selected
    SQL> select id,sub_desc,nvl(sum(decode(tn1,1,account)),0) column1,
      2             nvl(sum(decode(tn1,2,account)),0) column2,
      3             nvl(sum(decode(tn1,3,account)),0) column3,
      4             nvl(sum(decode(tn1,4,account)),0) column4,
      5             nvl(sum(decode(tn1,5,account)),0) column5,
      6             nvl(sum(decode(tn1,6,account)),0) column6
      7  from (
      8  select id,sub_desc,account,
      9            dense_rank() over(partition by id||sub_desc order by account) as tn1
     10  from test_tab)
     11  group by id,sub_desc
     12  
    SQL> /ID   SUB_DESC      COLUMN1    COLUMN2    COLUMN3    COLUMN4    COLUMN5    COLUMN6
    ---- ---------- ---------- ---------- ---------- ---------- ---------- ----------
    001  独生子女         3400          0          0          0          0          0
    001  职工本人         1500       2500          0          0          0          0
    002  独生子女         1300          0          0          0          0          0
    003  独生子女         1100       5865        640          0          0          0
    003  职工本人         1855        236       3566       4765          0          0利用这个查询做为子查询就可以直接UPDATE楼主的表了update Temp_Calc_data a
    set   (a.column1 ,
           a.column2 ,
           a.column3 ,
           a.column4 ,
           a.column5 ,
           a.column6 
          ) =
          (
           select b.column1,
                  b.column2,
                  b.column3,
                  b.column4,
                  b.column5,
                  b.column6
           from  (
                  --这里用我所举例的查询其中表和栏位替换成楼主的就可以了
                  ) b
           where  a.id = b.id
           and    a.submitsort = b.submitsort
          )              
      

  3.   

    baojianjun(包子)
    的答案让人很震奋,这帖子本来50分现在再加20分给你