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

解决方案 »

  1.   

    SELECT * FROM tableA,tableB,tableC 
         WHERE A.WLBH = B.WLBH
          AND B.WLBH = C.WLBH
      

  2.   

    楼主给的数据有问题,
    比如:仓库里面没有201,为何入库表里面有201号货物?而且而且201号货物,都没有rksl=0怎么得来的cksl=5?
      

  3.   


    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
      

  4.   

    谢谢BOBO12082119!
    你中间提出的那个问题,是因为,库存是初始化的。
    一开始库存里面没有,后来就买进了,买进以后没有进行入库就直接出库了。
      

  5.   

    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;
      

  6.   

    tangren(老兵新手) 正解。
    谢谢!
    将需要做外连接的先自己做成表。