我有下面三个表分别为库存的初始化表tableA包含wlbh(物料编号),cssl(初始数量)tableB包含wlbh(物料编号) rksl(入库数量) tableC包含wlbh(物料编号) cksl(出库数量) 想利用这三个表来取得库存的数量。
tableA
wlbh cssl
101 4
301 5
501 6tableB
wlbh rksl
101 2
102 4
301 5
101 1tableC
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三个表里面的物料编码都取出来,然后将初始的数量和入库的同种物料的和以及出库的物料的和都查询出来。拜托了!大侠们。
tableA
wlbh cssl
101 4
301 5
501 6tableB
wlbh rksl
101 2
102 4
301 5
101 1tableC
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三个表里面的物料编码都取出来,然后将初始的数量和入库的同种物料的和以及出库的物料的和都查询出来。拜托了!大侠们。
解决方案 »
- Oracle9i在Solaris10平台上以silent方式安装时出现的DISPLAY的问题!
- 巨复杂一个查询,高手看看
- 100分!!!如何用SQL PLUS远程登陆ORACLE数据库(请高手详细做答)
- oracle 的数据库是否只是可以建立一个
- C语言开发oracle的一些问题
- 在oracle中没有自动增长的序列哦?我想一个字段如index,有从1每加一条记录就自动增长,就如何弄呢?谢谢
- 请问一下各位高手,在oracle如何创建一个具有dba权限的用户
- oracle9i系统表空间大小问题?
- 从一部机A将一个方案里的所有表,触发齐序列号存储过程导入到另一机B是否一定要在B里建同样的表空间和用户名的?
- 我是oracle初学者,请高手指点,如何快速入门?
- 数据库触发器触发外部程序,可以吗?
- 关于CLEAR的问题。。
WHERE A.WLBH = B.WLBH
AND B.WLBH = C.WLBH
比如:仓库里面没有201,为何入库表里面有201号货物?而且而且201号货物,都没有rksl=0怎么得来的cksl=5?
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
你中间提出的那个问题,是因为,库存是初始化的。
一开始库存里面没有,后来就买进了,买进以后没有进行入库就直接出库了。
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;
谢谢!
将需要做外连接的先自己做成表。