先有3张这样的表:天数 地区      
1     a        
2     b
3     c金额 地区
10    a
20    c人数  地区
100    a   
200    b
300    d
100    e 想将这3张表合成这样子的表:地区 天数 金额 人数
a     1    10   100
b     2     0   200
c     3    20   0
d     0     0   300
e     0     0   100

解决方案 »

  1.   

    10:30:39 tina@PRACTICE> select * from tb1;      天数 地区
    ---------- ----------
             1 a
             2 b
             3 c已用时间:  00: 00: 00.00
    10:30:47 tina@PRACTICE> select * from tb2;      金额 地区
    ---------- ----------
            10 a
            20 c已用时间:  00: 00: 00.01
    10:30:50 tina@PRACTICE> select * from tb3;      人数 地区
    ---------- ----------
           100 a
           200 b
           300 d
           100 e已用时间:  00: 00: 00.00
    10:30:53 tina@PRACTICE> select a.地区,nvl(天数,0) 天数,nvl(金额,0) 金额,nvl(人数,0) 人数 from
    10:31:02   2  (select 地区 from tb1 union select 地区 from tb2 union select 地区 from tb3) a,
    10:31:02   3  tb1,tb2,tb3
    10:31:02   4  where a.地区 = tb1.地区(+) and a.地区 = tb2.地区(+) and a.地区 = tb3.地区(+)
    10:31:02   5  order by 1;地区             天数       金额       人数
    ---------- ---------- ---------- ----------
    a                   1         10        100
    b                   2          0        200
    c                   3         20          0
    d                   0          0        300
    e                   0          0        100已用时间:  00: 00: 00.01
      

  2.   

    select a.地区,nvl(天数,0) 天数,nvl(金额,0) 金额,nvl(人数,0) 人数 from 
    (select 地区 from tb1 union select 地区 from tb2 union select 地区 from tb3) a,
    tb1,tb2,tb3
    where a.地区 = tb1.地区(+) and a.地区 = tb2.地区(+) and a.地区 = tb3.地区(+)
    order by 1;