在具有多个层的两个表中添加两列

时间:2014-11-17 17:16:46

标签: sql oracle

我在这里有两个表,我需要添加两列。

table 1                     table 2

1   ram     100 null        1   ram     100 1000
2   ram     200 1000        2   ram     200 null
3   ram     100 2000        3   ram     100 3000
4   ram     100 3000        4   ram     100 4000
5   ram     100 null        5   ram     100 5000
1   rahim   100 5000        1   rahim   100 null
2   ram     200 6000        2   ram     200 7000
3   ram     200 null        3   ram     200 8000
4   ram     200 null        4   ram     200 9000
5   rahim   100 9000        5   rahim   100 null
1   robert  100 10000       1   robert  100 11000
2   rahim   200 11000       2   rahim   200 12000
3   ram     300 12000       3   ram     300 null
4   rahim   400 13000       4   rahim   400 14000
5   robert  100 14000       5   robert  100 15000

结果应采用以下形式:

1   ram     100 1000
2   ram     200 -1000
3   ram     100 1000
4   ram     100 1000
5   ram     100 5000
1   rahim   100 -5000
2   ram     200 1000
3   ram     200 8000
4   ram     200 9000
5   rahim   100 -9000
1   robert  100 1000
2   rahim   200 1000
3   ram     300 -12000
4   rahim   400 1000
5   robert  100 1000

2 个答案:

答案 0 :(得分:3)

您可以join使用coalesce删除null值:

select t1.id, t1.somefield, t1.someint, 
       coalesce(t2.someint2,0)-coalesce(t1.someint2,0)
from table1 t1
  join table2 t2 on t1.id = t2.id 
    and t1.somefield = t2.somefield
    and t1.someint = t2.someint

根据您的输入数据,这将连接前3列。不完全确定这是你想要的,但应该让你朝着正确的方向前进。

答案 1 :(得分:2)

我想尝试subtract table2.col4 with table1.col4

SELECT a.col1,
       a.col2,
       a.col3,
       NVL(a.col4, 0) - NVL(b.col4, 0) SUB
FROM   table1 A
       JOIN table2 B
         ON A.col1 = b.col1
            AND a.col2 = b.col2