现有类似如下的两张表:
表A
aa   bb  cc
---------------
11   02   6039
22   02   7090
33   02   6039
表B
aa   bb cc   dd
---------------
11   02  7090  1.1
22   02  7090  2.2
44   02  6039  3.2要求实现结果如下:
aa  bb   cc  sum(dd)
-------------------------
11 02   6039  0
22  02  7090  2.2
33 02   6039   0
即:表A中的内容要全部存在,并且aa,bb,cc字段的内容,相应的对dd字段求和。应该属于多字段的外联接语句问题,请问如何实现?我自己尝试写了
select A.aa,A.bb,A.cc,sum(B.dd) 
from A,B 
where A.aa=b.aa(+) and A.cc=B.cc(+)
group by  A.aa,A.bb,A.cc  结果没实现。

解决方案 »

  1.   

    试试这个,小改一下.select A.aa,A.bb,A.cc,sum(nvl(B.dd,0)) 
    from A,B 
    where A.aa=b.aa(+) and A.bb=b.bb(+) and A.cc=B.cc(+) 
    group by  A.aa,A.bb,A.cc 
      

  2.   

    基本没错。
    sum(B.dd) ==》 nvl(sum(B.dd), 0)就可以把 0 值显示出来了。
      

  3.   

    select A.aa,A.bb,A.cc,sum(NVL(B.dd,0)) 
    from A,B 
    where A.aa=b.aa(+) and A.bb=b.bb(+) and A.cc=B.cc(+) 
    group by  A.aa,A.bb,A.cc 
    这样写比较合适
      

  4.   

    首先谢谢大家的帮忙!
    关于nvl()函数的使用,我也试过,不起作用。
    另一处改动,照大家的意思是A表与B表的共有字段必须全部外联接吗?我实际中的表很大,有若干字段。现在关键是举例中至少类似11的记录出不来。
      

  5.   

    要不你这样写,A表中有的就一定会出来.select A.aa,A.bb,A.cc,sum(nvl(B.dd,0)) 
    from A
    left join B on A.aa=b.aa and A.bb=b.bb and A.cc=B.cc
    group by  A.aa,A.bb,A.cc