如下两张表:需要用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
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
---------- -------------------- --------------------
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
)
的答案让人很震奋,这帖子本来50分现在再加20分给你