有三个表:A:仓库,物料,现有量,金额
          B:仓库,物料,出库量,出库金额
          C:仓库,物料,入库量,入库金额
三个表的记录各不相同,A中有的记录,B中不一定有,B中有的C不一定有,A中有的C中也不一定有;现在想将三个表按“仓库,物料,出库数量,出库金额,入库数量,入库金额,现有量,现有量金额”连接一张表,应该怎么写语句? 

解决方案 »

  1.   

    主物料表没有仓库,一个物料可以存放在多个仓库:
    表A是:仓库,物料,本期入库数量,本期入库金额,
    表B是:仓库,物料,本期出库数量,本期出库金额,
    表C是:仓库,物料,期末结余数量,期末结余金额
    现在想将三表连成一个表:
    仓库,物料,本期入库数量,本期入库金额,本期出库数量,本期出库金额,期末结余数量,期末结余金额
    应该如何写这样的语句。
      

  2.   

    select isnull(t.仓库,c.仓库) 仓库  , isnull(t.物料,c.物料) 物料,
           isnull(t.出库量,0) 出库数量 , isnull(t.出库金额,0) 出库金额,
           isnull(c.入库量,0) 入库量   , isnull(c.入库金额,0) 入库金额, 
           isnull(t.现有量,0) 现有量   , isnull(t.金额,0) 现有金额
    from
    (
      select isnull(a.仓库,b.仓库) 仓库,isnull(a.物料,b.物料) 物料,isnull(b.出库量,0) 出库数量,isnull(b.出库金额,0) 出库金额,isnull(a.现有量,0) 现有量,isnull(a.金额,0) 现有金额
      from a full b on a.仓库 = b.仓库 and a.物料 = b.物料
    ) t
    full join c on t.仓库 = c.仓库 and t.物料 = c.物料
      

  3.   

    主物料表没有仓库,一个物料可以存放在多个仓库: 
    表A是:仓库,物料,本期入库数量,本期入库金额, 
    表B是:仓库,物料,本期出库数量,本期出库金额, 
    表C是:仓库,物料,期末结余数量,期末结余金额 
    现在想将三表连成一个表: 
    仓库,物料,本期入库数量,本期入库金额,本期出库数量,本期出库金额,期末结余数量,期末结余金额 
    应该如何写这样的语句。
    -------------------------------------------------------------------------------------
    select isnull(t.仓库,t3.仓库) 仓库,isnull(t.物料,t3.物料) 物料,
           isnull(t.本期入库数量,0) 本期入库数量,isnull(t.本期入库金额,0) 本期入库金额,
           isnull(t.本期出库数量,0) 本期出库数量,isnull(t.本期出库金额,0) 本期出库金额,
           isnull(t3.期末结余数量,0) 期末结余数量,isnull(t3.期末结余金额,0) 期末结余金额
    from
    (
      select isnull(t1.仓库,t2.仓库) 仓库,isnull(t1.物料,t2.物料) 物料,
             isnull(t1.本期入库数量,0) 本期入库数量,isnull(t1.本期入库金额,0) 本期入库金额,
             isnull(t2.本期出库数量,0) 本期出库数量,isnull(t2.本期出库金额,0) 本期出库金额
      from
      (select 仓库,物料,本期入库数量=sum(本期入库数量),本期入库金额=sum(本期入库金额) from a group by 仓库,物料) t1
      full join
      (select 仓库,物料,本期出库数量=sum(本期出库数量),本期出库金额=sum(本期出库金额) from b group by 仓库,物料) t2
      on t1.仓库 = t2.仓库 and t1.物料 = t2.物料
    ) t
    full join
    (select 仓库,物料,期末结余数量=sum(期末结余数量),期末结余金额=sum(期末结余金额) from c group by 仓库,物料) t3
    on t.仓库 = t3.仓库 and t.物料 = t3.物料
      

  4.   

    如果在oracle呢?oracle好像不支持全连接。
      

  5.   

    ORACLE只有左或右连接,没有全连接.
      

  6.   

    在ORACLE里面可以使用union all变通一下,没有的字段全部用0表示.
      

  7.   

    select 仓库 , 物料 , sum(本期入库数量) 本期入库数量 , sum(本期入库金额) 本期入库金额 , 0 本期出库数量 , 0 本期出库金额 , 0 期末结余数量 , 0 期末结余金额 from a group by 仓库,物料
    union all
    select 仓库 , 物料 , 0 本期入库数量 , 0 本期入库金额 , sum(本期出库数量) 本期出库数量 , sum(本期出库金额) 本期出库金额 , 0 期末结余数量 , 0 期末结余金额 from b group by 仓库,物料
    union all
    select 仓库 , 物料 , 0 本期入库数量 , 0 本期入库金额 , 0 本期出库数量 , 0 本期出库金额 , sum(期末结余数量) 期末结余数量 , sum(期末结余金额) 期末结余金额 from c group by 仓库,物料
      

  8.   


    --先得出B\C表的合计,再连A表
    select 
    [仓库]=COALESCE(a.仓库,t3.仓库),
    [物料]=COALESCE(a.物料,t3.物料),
    [现有量]=isnull(现有量,0),
    [出库量]=isnull([出库量],0),
    [出库金额]=isnull(出库金额,0),
    [入库量]=isnull(入库量,0),
    [入库金额]=sum(入库金额,0)
    from 
    A
    full join (select 
    [仓库]=COALESCE(t1.仓库,t2.仓库),
    [物料]=COALESCE(t1.物料,t2.物料),
    [出库量]=isnull([出库量],0),
    [出库金额]=isnull(出库金额,0),
    [入库量]=isnull(入库量,0),
    [入库金额]=sum(入库金额,0)
    from 
    (select 
    仓库,
    物料,
    [出库量]=sum(出库量),
    [出库金额]=sum(出库金额)
    from 
    B
    group by 仓库,物料
    )T2
    full join
    (select 
    仓库,
    物料,
    [入库量]=sum(入库量),
    [入库金额]=sum(入库金额)
    from 
    C
    group by 仓库,物料
    )T2 on t1.仓库=t2.仓库 and t1.物料=t2.物料
    )T3 on a.仓库=t3.仓库 and a.物料=t3.物料
      

  9.   

    dawugui 你太厉害了,一语点醒梦中人啊。
    我先将所有记录union,然后再求和。