表1 
   仓库   产品编码  结存数量 
   产品库  A1     10
   预留库  A1     20
   产品库  B1     30
   预留库  B1     20表2 
  产品编码 产品库结存 预留库存
   A1     80      10
   B1     50      5
   C1     30      20货物档案
  产品编码 产品名称  
   A1   A产品
   B1   B产品将表1和表2合并表3表3结构   产品编码  产品名称  全库结存  预留库存  可用结存
   A1    A产品    110     20     90
   B1    B产品    100     25     85
   C1    C产品    30      20     10全库结存=表1库存+表2库存
预留库存=表1预留库存+表2预留库存
可用结存=全库结存-预留库存

解决方案 »

  1.   

    设表1表名为Tab1,表表名为Tab2,货物档案表为Tab3Select Tab3.产品编码,Tab3.产品名称,
    '全库结存'=(
    Isnull((Select sum(Tab1.结存数量) From Tab1
    Where Tab1.产品编码=Tab3.产品编码
    Group By Tab1.产品编码),0)
    +Tab2.产品库结存),
    '预留库存'=(
    Isnull((Select sum(Tab1.结存数量) From Tab1
    Where Tab1.产品编码=Tab3.产品编码
    And Tab1.仓库='预留库'
    Group By Tab1.产品编码),0)
    +Tab2.预留库存),
    '可用结存'=(Isnull((Select sum(Tab1.结存数量) From Tab1
    Where Tab1.产品编码=Tab3.产品编码
    And Tab1.仓库='产品库'
    Group By Tab1.产品编码),0)
    +Tab2.产品库结存)
    From Tab2,Tab3
    Where Tab3.产品编码=Tab2.产品编码
      

  2.   

    select aa.产品编码,bb.产品名称,aa.产品库存,aa.预留库存,isnull(aa.产品库存,0)-isnull(aa.预留库存,0) as 可用结存
     from 
    (
    select 产品编码 ,sum(产品库存) as 产品库存,sum(预留库存) as 预留库存  from 
    (
    SELECT 产品编码 AS 产品编码,产品库结存 AS 产品库存,预算库结存 AS 预留库存 FROM dbo.表2
    UNION ALL
    SELECT 产品编码 AS 产品编码,结存数量 AS 产品库存,0 AS 预留库存 FROM dbo.表1
    UNION ALL
    SELECT 产品编码 AS 产品编码,0 AS 产品库存,结存数量 AS 预留库存 FROM dbo.表1 WHERE 仓库='预留库'

    ) AS 库存 group by 产品编码
    ) aa inner  join dbo.货物档案 bb on aa.产品编码=bb.产品编码 order by aa.产品编码
      

  3.   

    select aa.产品编码,bb.产品名称,aa.产品库存,aa.预留库存,isnull(aa.产品库存,0)-isnull(aa.预留库存,0) as 可用结存
     from 
    (
    select 产品编码 ,sum(产品库存) as 产品库存,sum(预留库存) as 预留库存  from 
    (
    SELECT 产品编码 AS 产品编码,产品库结存 AS 产品库存,预算库结存 AS 预留库存 FROM dbo.表2
    UNION ALL
    SELECT 产品编码 AS 产品编码,结存数量 AS 产品库存,0 AS 预留库存 FROM dbo.表1
    UNION ALL
    SELECT 产品编码 AS 产品编码,0 AS 产品库存,结存数量 AS 预留库存 FROM dbo.表1 WHERE 仓库='预留库'

    ) AS 库存 group by 产品编码
    ) aa inner  join dbo.货物档案 bb on aa.产品编码=bb.产品编码 order by aa.产品编码
      

  4.   

    Select Tab3.产品编码,Tab3.产品名称,
    '全库结存'=(
    Isnull((Select sum(Tab1.结存数量) From Tab1
    Where Tab1.产品编码=Tab3.产品编码
    Group By Tab1.产品编码),0)
    +Tab2.产品库结存),
    '预留库存'=(
    Isnull((Select sum(Tab1.结存数量) From Tab1
    Where Tab1.产品编码=Tab3.产品编码
    And Tab1.仓库='预留库'
    Group By Tab1.产品编码),0)
    +Tab2.预留库存),
    '可用结存'=(Isnull((Select sum(Tab1.结存数量) From Tab1
    Where Tab1.产品编码=Tab3.产品编码
    And Tab1.仓库='产品库'
    Group By Tab1.产品编码),0)
    +Tab2.产品库结存)
    From Tab2,Tab3
    Where Tab3.产品编码=Tab2.产品编码 GROUP BY Tab3.产品编码
      

  5.   

    首先查表1   以产品编码进行分组,取sum(结存数量) 得到 产品编码 和 sum(结存数量) 得到一个临时表
    这个临时表和表2进行连接 就能得到想要的结果了