入库明细表结构 [RuKu]
仓库(ck) 名称(mc) 规格(gg) 重量(zl) 件数(js)
仓库1    名称1    规格1    2吨      3件
仓库1    名称1    规格1    1吨      2件
仓库1    名称1    规格2    1吨      5件
仓库2    名称2    规格2    1吨      5件
出库明细表结构 [ChuKu]
仓库(ck) 名称(mc) 规格(gg) 重量(zl) 件数(js)
仓库1    名称1    规格1    1吨      2件
仓库1    名称1    规格1    1吨      1件
仓库2    名称2    规格2    1吨      4件
统计库存结果的时候,唯有当:仓库,名称,规格三个字段相同的才视为1种产品,或说是1条库存记录
库存重量=仓库,名称,规格相同的入库表中重量之和 减去 仓库,名称,规格相同的出库表中重量之和
库存件数=仓库,名称,规格相同的入库表中件数之和 减去 仓库,名称,规格相同的出库表中件数之和
本例中重量和件数其实没有直接关系,大家不要考虑通过件数来算出重量来,这也是我抽象出来的一个原型,实际的情况中字段太多,不容易看按上上面的规则,正确的库存统计出来的数据其实应该如下:库存列表
仓库(ck) 名称(mc) 规格(gg) 重量(zl) 件数(js)
仓库1    名称1    规格1    1吨      2件
仓库1    名称1    规格2    1吨      5件
仓库2    名称2    规格2    0吨      1件因为库存表中只有仓库,名称,规格三个字段统一才能视为一种产品,而且这三个字段的值是可动态添加的,我曾经的思路是建一个产品表
产品表[ChanPin]
id 仓库(ck) 名称(mc) 规格(gg)当每次入库时我都把本次入库的 “仓库,名称,规格”与产品表中现有的比对,如果没有就插入进去,
然后统计库存的时候,我遍历这个表,大约意思如下set rs = conn.execute("select ck,mc,gg from [ChanPin] order by ck asc")
Do While Not rs.eof
下面不写全了,只写sql语句大家理解意思就行
sql="select sum(zl) from [Ruku] where ck='"&rs("ck")&"' and ck='"&rs("mc")&"' and gg='"&rs("gg")&"'"
sql="select sum(js) from [Ruku] where ck='"&rs("ck")&"' and ck='"&rs("mc")&"' and gg='"&rs("gg")&"'"
sql="select sum(zl) from [Chuku] where ck='"&rs("ck")&"' and ck='"&rs("mc")&"' and gg='"&rs("gg")&"'"
sql="select sum(js) from [Chuku] where ck='"&rs("ck")&"' and ck='"&rs("mc")&"' and gg='"&rs("gg")&"'"
以上其实就是用四次sum查询分别把入库总重量,入库总件数,出库总重量,出库总件数求出来,
然后再相减
rs.movenext
Loop : rs.close : Set rs = Nothing上面这个方法肯定能解决问题,但是很显然太臃肿了,也没效率,再说我实际中的字段比这个要多很多,要列出的sum值也很多,,我相信会有更好的更有效率的方法解决。
我也查找过资料换过集中sql写法,包括 left join, gruop by , 但是小弟sql水平太差,总是查不出我想要的结果来。
我再写的查询的时候,也碰到这种情况,因为入库表里有的某种产品,不见得出库表里这条产品一定有出库记录,所以有些级联查询的方式只能查处出库入库表里都有这种产品的的记录,这也不是我想要的。请求高手赐教!谢谢!