当前位置:主页>销售管理软件> 列表

这个存储过程如何写,请大虾露一手看~~~~~~~~~~~~ 找零售管理

仓库管理软件版1楼: 有这么两张表:

T1 (KHID,本次销售额,日期,本次收款额)
T2 (KHID,初始余额)

要得到如下结果

根据任意时间段查询出:

KHID 日期 本次销售额 本次收款额 上期余额 本期余额


如:

T1

sh001 50 2006-01-18 0
sh001 100 2006-01-18 0
sh001 0 2006-01-18 300

T2
sh001 1000


最终结果如下:

sh001 2006-01-18 50 0 1000 1050
sh001 2006-01-18 100 0 1050 1150
sh001 2006-01-18 0 300 1150 850

...

2楼: 先计算在存储 如零售管理

3楼: CREATE PROCEDURE MYCPKKC
@QSRQ datetime, @ZZRQ datetime--假设你的期初里有日期
AS
begin
create table #T(KHID varchar(20),BQXS float,BQSK float,SQYE float,BQYE float)--本次销售额 本次收款额 上期余额

本期余额

insert into #T
select KHID,0,0,0,0
from T2 where RQ = @QSRQ--期初
union
select KHID,0,0,0,0
from T1
where 日期> @QSRQ and 日期<= @ZZRQ
--根据选定的期初、查询的日期获得KHID信息

update #T set SQYE=(select sum(T2.初始余额)
from T2
where #T.KHID=T2.KHID
and T2.RQ = @QSRQ)--回填上期余额

update #T set BQXS=(select sum(T1.本次销售额)
from T1
where #T.KHID=T1.KHID
and T1.日期 > @QSRQ and T1.日期 <= @ZZRQ)--回填本期销售

update #T set BQSK=(select sum(T1.本次收款额 )
from T1
where #T.KHID=T1.KHID
and T1.日期 > @QSRQ and T1.日期 <= @ZZRQ)--回填本次收款额


update #T set BQYE=isnull(SQYE,0) + isnull(BQXS,0) -isnull(BQSK,0)

select * from #T

drop table #T
end
GO

4楼: 加一个fid,作为自增值,identity(int)
fid (KHID,本次销售额,日期,本次收款额)
1 sh001 50 2006-01-18 0
2 sh001 100 2006-01-18 0
3 sh001 0 2006-01-18 300

T1 (KHID,本次销售额,日期,本次收款额)
T2 (KHID,初始余额)
sh001 1000
KHID 日期 本次销售额 本次收款额 上期余额 本期余额
select t1.KHID,t1.日期,t1.本次销售额,t1.本次收款额,
(select b.初始余额+sum(a.本次收款额) from t1 a,t2 b
where a.fidwhere a.fid from t1

5楼: 不好意思,修改如下:
select t1.KHID,t1.日期,t1.本次销售额,t1.本次收款额,
b.初始余额+(select sum(a.本次收款额) from t1 a
where a.fidwhere a.fid from t1,t2
where t1.khid=t2.khid
order by t1.fid

6楼: 感觉楼上几位大虾写的不太正确,jackwuyes,你的where a.fid仓库管理软件版7楼: 今天晕,刚才楼主说有问题,我看了下。发现是有很大问题,这个我没测试,也不知道结果是不是正确。:)
where a.fid比如到了FID 3的时候,这时就计算fid<3就是1,2的累计值。
------还请楼主测试一下,告诉我是否正确。
最新修改如下:
select t1.KHID,t1.日期,t1.本次销售额,t1.本次收款额,
b.初始余额+(select sum(a.本次销售额)-sum(a.本次收款额) from t1 a
where a.fid from t1,t2
where t1.khid=t2.khid
order by t1.fid

8楼: 我还没测试过,a.fid9楼: 游标比较好处理

10楼: 千万不要用游标,除非万不得已的时候。
效率的话如果不是数据很大的话,你大可不比担心。
还有一种更好的办法,但要用二个表。
你把(select sum(a.本次销售额)-sum(a.本次收款额) from t1 a
where a.fid然后在与t1 表关联起来,关联的字段作索引。
说这么多,就是为了把索引用起来。要速度首先考虑用索引。

11楼: 与jackwuyes同感,你的数据结构有问题.
如按jackwuyes那样改,可用这个查询得出结果

select fid,khid, 日期, 本次销售额, 本次收款额,
(select 初始余额 from t2 where khid= a.khid)


+isnull((select sum(本次销售额) from t1 where khid=a.khid and fid < a.fid),0)
-isnull((select sum(本次收款额) from t1 where khid=a.khid and fid < a.fid),0) as 上期余额,
(select 初始余额 from t2 where khid= a.khid)
+isnull((select sum(本次销售额) from t1 where khid=a.khid and fid < a.fid),0)
-isnull((select sum(本次收款额) from t1 where khid=a.khid and fid < a.fid),0) + 本次销售额 - 本次收款额 as 本期余额
from t1 a
order by fid;