500分求高效算法(另开贴结分),有关数据库的数据汇总 之二
mylzw 2003-12-31 05:36:22 首先~ 欢迎大家的参与。
现在要汇总一个表中时间段内的数据,数据库为ACCESS2000格式。
表结构是这样的。
单据编号,货品编码,产品进仓,产品销售,产品退货,单据日期
一律为 Char类型 ;)
现在的目的是,指定一个时间段,比如:2003-01-01 至 2003-01-31 之内的数据。得出以下结果
货品编码,上期结存,产品进仓,产品销售,产品退货,本期结存
JL0202 10 100 50 0 60
Rl805 30 100 50 0 80
............
首先要查询出自第一笔业务(第一笔业务假设为2002-01-01发生的) 以来至2002-12-31的结存作为上期结存。
我是这样做的。
Rs_1=Conn.Execute("select sum(产品进仓) - sum(产品销售) - sum(产品退货) as 上期结存 from 单据 where 单据日期>='2002-01-01' and 单据日期<'2003-01-01' Group By 货品编码")
这样就得到了所有货品的上期结存.
然后。。。
Rs_2=Conn.Execute("select sum(产品进仓),sum(产品销售),sum(产品退货) as 本期结存 from 单据 where 单据日期>='2003-01-01' and 单据日期<='2003-01-31' Group By 货品编码")
这样就得到了所有货品的本期汇总数据。
现在的问题是,要逐个货品的将刚刚得到 上期结存 + 本期结存 才能得出真正本期结存。
我现在是用了两个临时表,一个存储 Rs_1 , 一个存储 Rs_2
然后 "select Rs_1.上期结存 + Rs_2.本期结存 as 本期结存_val from Rs_1 Full join Rs_2 on Rs_1.货品编码 = Rs_2.货品编码" '这样将得到真正的本期结存
我想知道,除了这种方法,还有没有别的好办法呢?
(建立临时表的时候用了 DO until Rs_1.eof 及 insert 查询。这样当记录较多的情况下会影响速度。。。)