求高手指点迷津
问这样的过程应该怎样写啊
zpmx表 字段如下:(一笔一笔的业务都在里面)
bmbh(部门编号) varchar(10) 以部门编号统计
khbh(客户编号) varchar(10)
zpbh(支票编号) varchar(10)
rq(日期) datetime
je(金额) decmial(18,2)
djlb(单据类别) varchar(2)(1:代表收,2:代表付,收就把金额加上,付就减去)
我要的是统计某一段时间的(列出的是一天一天的)最后金额
要得到的是这样的结果:(例如:0100的11-14上午剩下的钱,也就是把11-14上午以前的金额都统计出来(相加相减),得到最后的钱
例如:@rq1=02-11-14 14:08:00:77,@rq2 =02-11-16 11:08:00:77
部门编号, 总的余额
02-11-14 上午 0100 200
02-11-14 下午 0100 300
02-11-15 上午 0100 -300
02-11-15 下午 0100 -1300
02-11-16 上午 0100 5000
02-11-16 下午 0100 4000
上午下午我实在写不出来啊,请教啊,一实现马上给分
问题点数:50、回复次数:4Top
1 楼ewchf(末日之刃)回复于 2002-11-16 17:24:28 得分 0
以下是我的没有上午,下午的,求高手指点这个这样加上去啊,不一定要文字啊
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER procedure p_cx @rq1 datetime,@rq2 datetime as
declare @li_j int
declare @li_i int
set @li_i = datediff(day,@rq1,@rq2)
set @li_j = 0
create table #temp1
(bmbh varchar(40),
je decimal(10,2),
rq datetime )
create table #temp2
(bmbh varchar(10),
je decimal(10,2),
rq datetime )
while @li_j <= @li_i
begin
insert into #temp1(bmbh,je,rq) select bmbh,je = case zpmx.djlb when '1' then zpmx.je when '2' then -zpmx.je end,(@rq1+@li_j) from zpmx where rq <= @rq1+@li_j
insert into #temp2(bmbh,je,rq) select bmbh,sum(je),min(CONVERT(decimal(18,2),rq)) from #temp1 group by bmbh
delete from #temp1
set @li_j= @li_j + 1
end
select * from #temp2
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Top
2 楼j9988(j9988)回复于 2002-11-16 18:26:25 得分 50
你不是都算出来了?
下午的就是当天结束的,上午的就是从原表中统出
部门日期和#temp2相等,但时间在12:00前的。
也就是当天下午结果减去>12:00发生的。
select *,'下午' as ppp from #temp
uniom all
select a.bmbh,a.je-b.je,a.rq,'上午' as ppp
from #temp2 a,
(select bmbh,sum(je*(case when djlb=1 then 1 else -1 end)),
convert(varchar(10),rq,120)) as rq
from zpmx
where datepart(hh,rq)>=12 group by bmbh,convert(varchar(10),rq,120)) b
where a.bmbh=b.bmbh and convert(varchar(10),a.rq,120)=convert(varchar(10),b.rq,120)Top
3 楼j9988(j9988)回复于 2002-11-16 18:30:04 得分 0
如果有那一天没发生的话,就用LEFT JION 加a.je-ISNULL(b.je,0)Top
4 楼leimin(黄山光明顶)回复于 2002-11-16 19:08:12 得分 0
楼上的,写的真快.
楼主好像是魔法门英雄无敌的爱好者,我也喜欢!Top




