表1、                                                     表2、id  date   shop   地点    总台数(T-T)     剩余台数                  id        date1      shop    地点    分配台数
1   01-09  东莞    黄埔     10              5                     2012       01-10      东莞     黄埔     5
2   01-09  汕头    增城     10              10                    2014       01-10      广州     增城     40
3   01-09  广州    增城     40              0                     4567       01-10      东莞     增城     10
4   01-09  东莞    增城     20              10                 
要得出这样的记录:id      date      shop     黄埔总数     增城总数
1       01-10     东莞         10           20
2       01-10     汕头                      10
3       01-10     广州                      40注意:黄埔总数和增城总数必须是(剩余台数)+(分配台数)不是从总台数里面查出来的。

解决方案 »

  1.   

    --try
    select min(a.id) id,b.date1 as date,a.shop,
           sum(case when a.地点='黄埔' then a.剩余台数+nvl(b.分配台数,0) else 0 end) 黄埔总数,
           sum(case when a.地点='增城' then a.剩余台数+nvl(b.分配台数,0) else 0 end) 增城总数
    from 表1 a left join 表2 b on a.shop=b.shop
     group by a.shop,b.date1
      

  2.   

    一楼大哥缘分啊,我怎么不知道有nvl()这函数呢?感谢你了,分一定给!!!
      

  3.   

    楼主的最后得出的记录里的id和日期 好像不是来自表1 表2
    我写了下:
    create table ab(id number
                    ,"DATE" date
                    ,shop varchar2(4 char)
                    ,地点 varchar2(4 char)
                    ,"总台数(T-T)" number
                    ,剩余台数 number)
    insert into ab values(1,to_date('2009-1-10','YYYY-MM-DD'),'东莞','黄埔',10,5);
    insert into ab values(2,to_date('2009-1-10','YYYY-MM-DD'),'汕头','增城',10,10);
    insert into ab values(3,to_date('2009-1-10','YYYY-MM-DD'),'广州','增城',40,0 );
    insert into ab values(4,to_date('2009-1-10','YYYY-MM-DD'),'东莞','增城',20,10);create table bc(id number
                    ,DATE1 date
                    ,shop varchar2(4 char)
                    ,地点 varchar2(4 char)
                    ,分配台数 number)
                                                                                     
    insert into bc values(2012,to_date('2009-01-09','YYYY-MM-DD'),'东莞','黄埔',5  ) ;
    insert into bc values(2014,to_date('2009-01-09','YYYY-MM-DD'),'广州','增城',40 ) ;
    insert into bc values(4567,to_date('2009-01-09','YYYY-MM-DD'),'东莞','增城',10 ) ;
    select  distinct '09-10'
                     ,shop
                     ,sum(decode(地点,'黄埔',台数,0)) over(partition by shop) 黄埔
                     ,sum(decode(地点,'增城',台数,0)) over(partition by shop) 增城
    from 
    (select shop,地点,剩余台数 台数 from ab 
    union all
    select shop,地点,分配台数 from bc) order by shop结果:
    1 09-10 东莞 10 20
    2 09-10 广州 0 40
    3 09-10 汕头 0 10