两张表 一张出库表 一张入库表
入库表: 物品编码  物品名称 入库数量 入库时间  备注     出库表:物品编码  物品名称 出库数量 出库时间 提取人  备注
          A         AAA       100     2001                        A         AAA       10     2011     XX      X  
          B         BBB       100     2009                        A         AAA       10     2010     YY      Y
          C         CCC       200     2007                        B         BBB       30     2011     ZZ      Z
          B         BBB       100     2006                        B         BBB       10     2010     KK      K
          A         AAA        50     2003                        C         CCC       20     2010     HH      H
          D         DDD        100    2000序号查询产生的表
       物品编码  物品名称  库存  入库时间  出库时间 提取人 备注
         A         AAA     130    2003      2011     XX     X
         B         BBB     160    2009      2011     ZZ     Z
         C         CCC     180    2007      2010     HH     H
         D         DDD     100    2000
说明: "库存"为  相同"物品编码" 表1"入库数量"总和- 表2"出库数量"总和
        入库时间 选择 入库表 中 最 大 时间  
        出库时间 , 提取人,备注  选择 出库表中 时间最大的 一组
        如果入库表 中 有未出库 的 物品 比如"D" 则  无   “出库时间 提取人 备注 ” 显示以上。小弟做 ASP 要用显示 表   SQL语法没有学太多   简单的还行  复杂的只能求救各位大大了!
最好详细点  因为小弟对SQL 了解不算多
等级太低  不能设置多少分  十分抱歉   还是希望有人能救命啊

解决方案 »

  1.   

    A AAA 100 2001 往下 为入库表  备注都未空
    A AAA 10 2011 XX X  往下 为出库表  备注为 X
      

  2.   

    --> --> (Roy)生成測試數據
     
    if not object_id('Tempdb..#入库表') is null
    drop table #入库表
    Go
    Create table #入库表([物品编码] nvarchar(1),[物品名称] nvarchar(3),[入库数量] int,[入库时间] int)
    Insert #入库表
    select N'A',N'AAA',100,'2001' union all
    select N'B',N'BBB',100,'2009' union all
    select N'C',N'CCC',200,'2007' union all
    select N'B',N'BBB',100,'2006' union all
    select N'A',N'AAA',50,'2003' union all
    select N'D',N'DDD',100,'2000'
    Go
    --> --> (Roy)生成測試數據
     
    if not object_id('Tempdb..#出库表') is null
    drop table #出库表
    Go
    Create table #出库表([物品编码] nvarchar(1),[物品名称] nvarchar(3),[出库数量] int,[出库时间] int,[提取人] nvarchar(2),[备注] nvarchar(1))
    Insert #出库表
    select N'A',N'AAA',10,'2011',N'XX',N'X' union all
    select N'A',N'AAA',10,'2010',N'YY',N'Y' union all
    select N'B',N'BBB',30,'2011',N'ZZ',N'Z' union all
    select N'B',N'BBB',10,'2010',N'KK',N'K' union all
    select N'C',N'CCC',20,'2010',N'HH',N'H'
    Go
    select 
    a.[物品编码],a.[物品名称],a.[入库数量]-isnull(b.[出库数量],0) as 库存,a.[入库时间],
    isnull(rtrim(c.[出库时间]),'') as [出库时间],
    isnull(c.[提取人],'') as [提取人],
    isnull(c.备注,'') as 备注
    from 
    (Select [物品编码],[物品名称],sum([入库数量])as [入库数量],MAX([入库时间]) as [入库时间] from #入库表 group by [物品编码],[物品名称]) as a
    left join 
    (select [物品编码],sum([出库数量])as [出库数量] from #出库表 group by [物品编码],[物品名称])as b on a.[物品编码]=b.[物品编码]
    left join 
    (select [物品编码],[出库时间],[提取人],[备注] from #出库表 as a where not exists(select 1 from #出库表 where [物品编码]=a.[物品编码] and [出库时间]>a.[出库时间]) ) as c
    on c.[物品编码]=a.[物品编码]/*
    物品编码 物品名称 库存 入库时间 出库时间 提取人 备注
    A AAA 130 2003 2011 XX X
    B BBB 160 2009 2011 ZZ Z
    C CCC 180 2007 2010 HH H
    D DDD 100 2000
    */
      
      

  3.   

    select
      a.物品编码 ,a.物品名称,
      isnull(a.入库数量,0)-isnull(c.出库数量,0) as 库存,
      a.入库时间,b. 出库时间,b.提取人 ,b.备注
    from
      (select  物品编码 ,物品名称 ,sum(入库数量 ) as  入库数量,max(入库时间) as 入库时间  from 入库表 group by 物品编码 ,物品名称)a
    left join 
      (select * from 出库表 t where 出库时间=(select max(出库时间) from 出库表 where 物品编码=t.物品编码)b
    on
      a.物品编码=b.物品编码 and a.物品名称=b.物品名称
    left join
       (select  物品编码 ,物品名称 ,sum(出库数量 ) as  出库数量  from 出库表 group by 物品编码 ,物品名称)
    on
      a.物品编码=c.物品编码 and a.物品名称=c.物品名称
      

  4.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2011-10-21 23:45:38
    -- Version:
    --      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    -- Jul  9 2008 14:43:34 
    -- Copyright (c) 1988-2008 Microsoft Corporation
    -- Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[入库表]
    if object_id('[入库表]') is not null drop table [入库表]
    go 
    create table [入库表]([物品编码] varchar(1),[物品名称] varchar(3),[入库数量] int,[入库时间] int,[备注] sql_variant)
    insert [入库表]
    select 'A','AAA',100,2001,null union all
    select 'B','BBB',100,2009,null union all
    select 'C','CCC',200,2007,null union all
    select 'B','BBB',100,2006,null union all
    select 'A','AAA',50,2003,null union all
    select 'D','DDD',100,2000,null
    --> 测试数据:[出库表]
    if object_id('[出库表]') is not null drop table [出库表]
    go 
    create table [出库表]([物品编码] varchar(1),[物品名称] varchar(3),[出库数量] int,[出库时间] int,[提取人] varchar(2),[备注] varchar(1))
    insert [出库表]
    select 'A','AAA',10,2011,'XX','X' union all
    select 'A','AAA',10,2010,'YY','Y' union all
    select 'B','BBB',30,2011,'ZZ','Z' union all
    select 'B','BBB',10,2010,'KK','K' union all
    select 'C','CCC',20,2010,'HH','H'
    --------------开始查询--------------------------
    select
      a.物品编码 ,a.物品名称,
      isnull(a.入库数量,0)-isnull(c.出库数量,0) as 库存,
      a.入库时间,b. 出库时间,b.提取人 ,b.备注
    from
      (select  物品编码 ,物品名称 ,sum(入库数量 ) as  入库数量,max(入库时间) as 入库时间  from 入库表 group by 物品编码 ,物品名称)a
    left join 
      (select * from 出库表 t where 出库时间=(select max(出库时间) from 出库表 where 物品编码=t.物品编码))b
    on
      a.物品编码=b.物品编码 and a.物品名称=b.物品名称
    left join
       (select  物品编码 ,物品名称 ,sum(出库数量 ) as  出库数量  from 出库表 group by 物品编码 ,物品名称)c
    on
      a.物品编码=c.物品编码 and a.物品名称=c.物品名称
    ----------------结果----------------------------
    /* 物品编码 物品名称 库存          入库时间        出库时间        提取人  备注
    ---- ---- ----------- ----------- ----------- ---- ----
    A    AAA  130         2003        2011        XX   X
    B    BBB  160         2009        2011        ZZ   Z
    C    CCC  180         2007        2010        HH   H
    D    DDD  100         2000        NULL        NULL NULL(4 行受影响)*/