Oracle三个表连接查询

fanbo 2011-05-22 01:25:26
我有下面三个表分别为库存的初始化表tableA包含wlbh(物料编号),cssl(初始数量)tableB包含wlbh(物料编号) rksl(入库数量) tableC包含wlbh(物料编号) cksl(出库数量) 想利用这三个表来取得库存的数量。
tableA
wlbh cssl
101 4
301 5
501 6

tableB
wlbh rksl
101 2
102 4
301 5
101 1

tableC
wlbh cksl
101 3
102 1
201 5
101 2

我怎样才能得到下面的数据表
wlbh cssl rksl cksl
101 4 3 5
102 0 4 1
201 0 0 5
301 5 5 0
501 6 0 0
也就是,将ABC三个表里面的物料编码都取出来,然后将初始的数量和入库的同种物料的和以及出库的物料的和都查询出来。

拜托了!大侠们。

...全文
1205 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanbo 2011-05-23
  • 打赏
  • 举报
回复
tangren(老兵新手) 正解。
谢谢!
将需要做外连接的先自己做成表。
不要悲剧人生 2011-05-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shinesai 的回复:]
我是新手,不太懂,还望解释语句的意思
[/Quote]
慢慢学习
小青蛙 2011-05-22
  • 打赏
  • 举报
回复
我是新手,不太懂,还望解释语句的意思
tangren 2011-05-22
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT wlbh, nvl(cssl, 0) cssl, nvl(rksl, 0) rksl, nvl(cksl, 0) cksl
FROM (SELECT wlbh, SUM(cssl) cssl FROM tableA GROUP BY wlbh)
FULL OUTER JOIN (SELECT wlbh, SUM(rksl) rksl
FROM tableB
GROUP BY wlbh)
USING (wlbh)
FULL OUTER JOIN (SELECT wlbh, SUM(cksl) cksl
FROM tableC
GROUP BY wlbh)
USING (wlbh))
ORDER BY wlbh;
fanbo 2011-05-22
  • 打赏
  • 举报
回复
可惜,不是我想要的。ta表里面的编码不会全的。
fanbo 2011-05-22
  • 打赏
  • 举报
回复
谢谢BOBO12082119!
你中间提出的那个问题,是因为,库存是初始化的。
一开始库存里面没有,后来就买进了,买进以后没有进行入库就直接出库了。
304的的哥 2011-05-22
  • 打赏
  • 举报
回复

SQL> with ta as(
2 select 101 wlbh,4 cssl from dual union all
3 select 301,5 from dual union all
4 select 501,6 from dual union all
5 select 102,0 from dual union all--这两项是我加上的,总觉得不是你的意思
6 select 201,0 from dual)--说实话,你的表设计的太不合理了,这么大的数据冗余你尽然没发现?
7 ,tb as(
8 select 101 wlbh,2 rksl from dual union all
9 select 102,4 from dual union all
10 select 301,5 from dual union all
11 select 101,1 from dual)
12 ,tc as(
13 select 101 wlbh,3 cksl from dual union all
14 select 102,1 from dual union all
15 select 201,5 from dual union all
16 select 101,2 from dual)
17 select ta.wlbh,
18 nvl(sum(ta.cssl),0) cssl,
19 nvl(sum(b.rksl),0) rksl,
20 nvl(sum(c.cksl),0) cksl
21 from ta,
22 (select wlbh,sum(rksl) rksl
23 from tb
24 group by wlbh) b,
25 (select wlbh,sum(cksl) cksl
26 from tc
27 group by wlbh) c
28 where ta.wlbh=b.wlbh(+)
29 and ta.wlbh=c.wlbh(+)
30 group by ta.wlbh
31 /

WLBH CSSL RKSL CKSL
---------- ---------- ---------- ----------
101 4 3 5
102 0 4 1
201 0 0 5
301 5 5 0
501 6 0 0
304的的哥 2011-05-22
  • 打赏
  • 举报
回复
楼主给的数据有问题,
比如:仓库里面没有201,为何入库表里面有201号货物?而且而且201号货物,都没有rksl=0怎么得来的cksl=5?
秋雨飘落 2011-05-22
  • 打赏
  • 举报
回复
SELECT * FROM tableA,tableB,tableC
WHERE A.WLBH = B.WLBH
AND B.WLBH = C.WLBH

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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