跨表SUM()的问题

harlemz 2003-07-10 10:24:58
表A:
编号 INTEGER, --PRIMARY KEY
姓名 VARCHAR2(10),
帐号 INTEGER
表B:
编号 INTEGER,
金额 NUMBER(10,2)
现求:用一条SQL写出A.编号,A.姓名,A.帐号,NVL(SUM(B.金额),0) WHERE B.编号=A.编号;
即求出A表中每个编号的姓名、帐号和B表中A.编号的金额之和!

谢谢各位!
...全文
52 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
harlemz 2003-07-11
  • 打赏
  • 举报
回复
已解决!

SELECT A.编号,A.姓名,A.帐号,
(select NVL(SUM(B.金额),0) from b where A.编号=B.编号
and B.日期>=TO_DATE('20030101','YYYYMMDD')
AND B.日期<=TO_DATE('20030201','YYYYMMDD'))
FROM A
pm323 2003-07-11
  • 打赏
  • 举报
回复
把对b表的筛选条件,放到子查询里。
select A.编号,A.姓名,A.帐号,NVL(SUM(B.金额),0)
from A aa,
(select *
from B bb
where bb.日期>=TO_DATE('20030101','YYYYMMDD') AND bb.日期<=TO_DATE ('20030201','YYYYMMDD')
) bb
where aa.编号=bb.编号(+)
group by A.编号,A.姓名,A.帐号
harlemz 2003-07-11
  • 打赏
  • 举报
回复
各位请帮忙解决一下!
harlemz 2003-07-10
  • 打赏
  • 举报
回复
还有一问,如果表B中还有一个字段B.日期,
select A.编号,A.姓名,A.帐号,NVL(SUM(B.金额),0)
from A as aa LEFT JOIN B as bb on aa.编号=bb.编号
where bb.日期>=TO_DATE('20030101','YYYYMMDD')
AND bb.日期<=TO_DATE('20030201','YYYYMMDD')
group by A.编号,A.姓名,A.帐号

得出的结果也不是所有表A的编号,只有一部分,怎么解决!
harlemz 2003-07-10
  • 打赏
  • 举报
回复
谢谢各位,已经搞定了!
select A.编号,A.姓名,A.帐号,NVL(SUM(B.金额),0)
from A as aa LEFT JOIN B as bb on aa.编号=bb.编号
group by A.编号,A.姓名,A.帐号

不知道和楼上的那句A.编号=B.编号(+)是不是一样!
lindqp 2003-07-10
  • 打赏
  • 举报
回复
select A.编号,A.姓名,A.帐号,NVL(SUM(B.金额),0) WHERE A.编号=B.编号(+)
group by A.编号,A.姓名,A.帐号
harlemz 2003-07-10
  • 打赏
  • 举报
回复
楼上的SQL只能查出B表中存在的编号,而B表中没有的编号则没有记录!
black_snail 2003-07-10
  • 打赏
  • 举报
回复
?
select A.编号,A.姓名,A.帐号,NVL(SUM(B.金额),0) WHERE B.编号=A.编号
group by A.编号,A.姓名,A.帐号

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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