不好意思!自己表达比较混乱,各位大侠请见谅!!
在学做一个进销存的小程序,用的是vb6,access97;
数据库中有A,B两表,A表是客户购货记录,B表是客户提货记录,要求客户在我单位的剩余货数.
A表中的字段有:购货客户名,商品名,购货数量.
B表中的字段有:提货客户名,商品名,提货数量.
如:A表
购货客户名   商品名   购货数量
张三          商品1      20      
李四          商品1      10
王五          商品1      20
王五          商品2      20
张三          商品1      40
张三          商品2      10
B表
购货客户名   商品名   提货数量
王五          商品1       10
王五          商品2       20
张三          商品1       50
怎么求各个客户的剩余数量,如下表:
购货客户名   商品名   剩余数量
张三          商品1      10      
              商品2      10      
李四          商品1      10
王五          商品1      10
              商品2      0用sql可以实现吗?请大侠帮帮忙,感激不尽!(定给高分!!)

解决方案 »

  1.   

    access97好像不支持子查询可能不行
    2000 或SQL下支持是可以
    select kk.aa,kk.bb,sum(kk.cc)
    from 
    (select 购货客户名 as aa,   商品名 as bb,   购货数量 as cc
    from 表1
    union
    select 购货客户名 as aa,   商品名 as bb,   0- 提货数量 as cc
    from 表2) kk
    group by kk.aa,kk.bb
      

  2.   

    select 购货客户名,商品名,sum(剩余)
    from 
    (select 购货客户名 , 商品名 ,sum(isnull(购货数量,0)) as 剩余 
    from 表1 group by 购货客户名,商品名 
    union
    select 购货客户名,商品名,- sum(isnull(提货数量,0)) as 剩余 
    from 表2 group by 购货客户名,商品名
    ) T
    group by 购货客户名,商品名
      

  3.   

    这样写你可能好理解一些:select A.购货客户名 ,A.商品名,sum(A.购货数量-B.提货数量) as 剩余
    from
    (
    select 购货客户名 , 商品名 ,sum(isnull(购货数量,0)) as 购货数量 
    from 表1 group by 购货客户名,商品名 
    )A,
    (
    select 购货客户名,商品名,sum(isnull(提货数量,0)) as 提货数量 
    from 表2 group by 购货客户名,商品名
    )B
    Where A.购货客户名 =B.购货客户名 And A.商品名=B.商品名
      

  4.   

    Select aa.购货客户名,aa.商品名,aa.购货数量-IsNull(bb.提货数量,0) as 剩余数量
    from (
    Select 购货客户名,商品名,sum(购货数量) as 购货数量
    from A表 group by 购货客户名,商品名
    ) aa
    Left Join B表 bb on aa.购货客户名 = bb.购货客户名 and aa.商品名 = bb.商品名
      

  5.   

    create table A表(购货客户名 varchar(10), 商品名 varchar(10),  购货数量 int)
    insert A表 select '张三','商品1',20
    Union all select '李四','商品1',10
    Union all select '王五','商品1',20
    Union all select '王五','商品2',20
    Union all select '张三','商品1',40
    Union all select '张三','商品2',10Create table B表(购货客户名 varchar(10), 商品名 varchar(10),提货数量 int)
    insert B表 select '王五','商品1', 10
    Union all select '王五','商品2', 20
    Union all select '张三','商品1', 50
    Select aa.购货客户名,aa.商品名,aa.购货数量-IsNull(bb.提货数量,0) as 剩余数量
    from (
    Select 购货客户名,商品名,sum(购货数量) as 购货数量
    from A表 group by 购货客户名,商品名
    ) aa
    Left Join B表 bb on aa.购货客户名 = bb.购货客户名 and aa.商品名 = bb.商品名
    order by charindex(aa.购货客户名,'张三李四王五')
    购货客户名      商品名        剩余数量        
    ---------- ---------- ----------- 
    张三         商品1        10
    张三         商品2        10
    李四         商品1        10
    王五         商品1        10
    王五         商品2        0(所影响的行数为 5 行)
      

  6.   

    这个不行么??select A.购货客户名 ,A.商品名,sum(A.购货数量-B.提货数量) as 剩余
    from
    (
    select 购货客户名 , 商品名 ,sum(isnull(购货数量,0)) as 购货数量 
    from 表1 group by 购货客户名,商品名 
    )A,
    (
    select 购货客户名,商品名,sum(isnull(提货数量,0)) as 提货数量 
    from 表2 group by 购货客户名,商品名
    )B
    Where A.购货客户名 =B.购货客户名 And A.商品名=B.商品名
      

  7.   

    Private Sub Command3_Click()
    sql="select A.购货客户名 ,A.商品名,sum(A.购货数量-B.提货数量) as 剩余 from (select购货客户名 , 商品名 ,sum(isnull(购货数量,0)) as 购货数量 from 表1 group by 购货客户名,商品名 )A,(select 购货客户名,商品名,sum(isnull(提货数量,0)) as 提货数量 
    from 表2 group by 购货客户名,商品名)B Where A.购货客户名 =B.购货客户名 And A.商品名=B.商品名
    Data1.RecordSource = sql
    Data1.Refresh
    End Sub
    我是象上面那样写的,因为我只会用data控件(因为我在access2000不懂等绑定,录入数据,data1.refresh总过不去)
    还有,我把sql="……"写在一行里
    运行时它总是提示我from子句语法错误,我好困惑,又很着急,其他的都差不多了,就差这个了.
    我错在哪,该怎么该,小马哥,拜托再指点指点!
      

  8.   

    Private Sub Command3_Click()
    dim rs as new adodb.recordset
    sql="select A.购货客户名 ,A.商品名,sum(A.购货数量-B.提货数量) as 剩余 from (select购货客户名 , 商品名 ,sum(isnull(购货数量,0)) as 购货数量 from 表1 group by 购货客户名,商品名 )A,(select 购货客户名,商品名,sum(isnull(提货数量,0)) as 提货数量 
    from 表2 group by 购货客户名,商品名)B Where A.购货客户名 =B.购货客户名 And A.商品名=B.商品名rs.open sql,cn
    '其中cn是你到数据库的连接
    Data1.RecordSource =rs
    Data1.Refresh
    rs.close
    set rs=nothing
    End Sub
      

  9.   

    小马哥,是不是access97不支持子查询呀.我在access2000里好像可以了/
    能 不能再请教一个问题,在access2k里,怎么控件绑定数据录入?我以前是access97,data控件.然后,Data1.RecordSource = "select * from 出库单",Text1.DataField = "购货单位".但在access2k这样的绑定我搞不定.望指点!!感激万分!