oracle 的外联接问题请教,谢谢!

zhcy816 2008-07-03 04:13:03
现有类似如下的两张表:
表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 结果没实现。
...全文
58 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhcy816 2008-07-07
  • 打赏
  • 举报
回复
可以试试看
chenqingyu 2008-07-04
  • 打赏
  • 举报
回复
要不你这样写,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
zhcy816 2008-07-04
  • 打赏
  • 举报
回复
首先谢谢大家的帮忙!
关于nvl()函数的使用,我也试过,不起作用。
另一处改动,照大家的意思是A表与B表的共有字段必须全部外联接吗?我实际中的表很大,有若干字段。

现在关键是举例中至少类似11的记录出不来。
tcl19841002 2008-07-03
  • 打赏
  • 举报
回复
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
这样写比较合适
ruihuahan 2008-07-03
  • 打赏
  • 举报
回复
基本没错。


sum(B.dd) ==》 nvl(sum(B.dd), 0)

就可以把 0 值显示出来了。
chenqingyu 2008-07-03
  • 打赏
  • 举报
回复
试试这个,小改一下.

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
sasacat 2008-07-03
  • 打赏
  • 举报
回复
我觉得你没写错啊

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧