我有下面三个表分别为库存的初始化表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三个表里面的物料编码都取出来,然后将初始的数量和入库的同种物料的和以及出库的物料的和都查询出来。拜托了!大侠们。
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;
谢谢!
将需要做外连接的先自己做成表。