标题:请教一条SQL语句计处存款余额
只看楼主
szmcpa
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-10-26
 问题点数:0 回复次数:11 
请教一条SQL语句计处存款余额


例:有一个收支表(szb)如下结构

日期(RQ),...项目(XM),收入, 支出
2006.10.01 收工资 500
2006.10.02 付房租 200
2006.10.03 购物 50

目标说明: 要用一条SQL语句生成结果集如下(比上表多一个结余)
每条记录的 结 = 上一条记录的结余+当前记录收入-当前记录支出

日期(RQ),...项目(XM),收入, 支出
2006.10.01 收工资 500
2006.10.02 付房租 200
2006.10.03 购物 50




搜索更多相关主题的帖子: SQL语句 余额 存款 工资 结余 
2006-10-26 10:04
潇洒老乌龟
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:407
专家分:0
注 册:2005-12-13
得分:0 
把你的结果写清楚了.

乌龟学堂http://www. 承接各种软件开发、系统集成、网络搭建。 QQ:124030710
2006-10-26 21:26
szmcpa
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-10-26
得分:0 
请教一条SQL语句计处存款余额

请教一条SQL语句计处存款余额
例:有一个收支表(szb)有人个字段分别是
1)收支日期(RQ)
2)收支项目(XM)
3)收入金额(SL)
4)支出金额 (ZC)


目标说明: (要用SQL计算出结余

要生成一个"收支余"的Datawindow明细表,要求采用一条SQL语句生成!不能用循不处理。
结余的计算公式是:

(每条记录的结余 = 上一条记录的结余+当前记录收入-当前记录支出)

生成的结果应该如下:

日期(RQ) 项目(XM) 收入 (SL) 支出(ZC) 结余(JY)
2006.10.01 收工资 500 500
2006.10.02 付房租 200 300
2006.10.03 购物支出 50 250

2006-10-27 21:31
jimn2000
Rank: 2
等 级:新手上路
威 望:3
帖 子:274
专家分:0
注 册:2006-4-3
得分:0 
这个问题在sql论坛里有的。我以前看过。找找

欢迎大家访问我的网站 www. 域名代理网站 web.
2006-10-28 15:43
jimn2000
Rank: 2
等 级:新手上路
威 望:3
帖 子:274
专家分:0
注 册:2006-4-3
得分:0 
干吗不把指出和收入放在一个字段里呢
真的好麻烦啊

欢迎大家访问我的网站 www. 域名代理网站 web.
2006-10-28 16:29
潇洒老乌龟
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:407
专家分:0
注 册:2005-12-13
得分:0 

declare @t table (
收支日期RQ datetime,
收支项目XM varchar(20),
收入金额SL int,
支出金额ZC int
)
insert @t
select '2006.10.01','收工资',500,0 union all
select '2006.10.02','付房租',0,200 union all
select '2006.10.03','购物支出',0,50


select 收支日期RQ , 收支项目XM , 收入金额SL , 支出金额ZC , 结余JY = isnull(收入金额SL - 支出金额ZC ,0) into #temp from @t

update #temp
set 结余JY=(select isnull(sum(收入金额SL - 支出金额ZC),0)
from #temp tt
where TT.收支日期RQ<=#temp.收支日期RQ)
select convert(varchar(10),收支日期RQ,120) as 收支日期RQ , 收支项目XM , 收入金额SL , 支出金额ZC , 结余JY from #temp

drop table #temp


--结果
收支日期RQ 收支项目XM 收入金额SL 支出金额ZC 结余JY
---------- ---------- ---------- ---------- -----------
2006-10-01 收工资 500 0 500
2006-10-02 付房租 0 200 300
2006-10-03 购物支出 0 50 250

(所影响的行数为 3 行)


乌龟学堂http://www. 承接各种软件开发、系统集成、网络搭建。 QQ:124030710
2006-10-29 17:33
szmcpa
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-10-26
得分:0 
版主!这名!where TT.收支日期RQ<=#temp.收支日期RQ) 中的TT是那来的



2006-10-30 12:03
szmcpa
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-10-26
得分:0 
您好版主!非常您的指点,现有以下不明还请指教!

1,数据库中已有收支表(szb)了不需要定义。
2,我想利用存储过程结合datawindow,显示出目标的收支余数据表,也就是说我实际上是想求存储过程中的SQL代码
3,我对版主代码的理解的思路如下:

1)定义一个临时表,然后将基本数据插入
2)在用SQL生成一个临时表,主要是生成每条记录的收支差额
3)用UPDATE 处理收支差额将其转化为余额,在这部份代码中我无法明白
“ where TT.收支日期RQ<=#temp.收支日期RQ)”这部份代码的,TT表源自何处?
4)显示处理结果

2006-10-30 14:26
潇洒老乌龟
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:407
专家分:0
注 册:2005-12-13
得分:0 

1、TT,表别名。
2、szb已有,我这里的@t就是你的szb
3、临时表#temp是通过szb(@t)生成的,是个中间过程。

对于你的做法,可以用如下代码生成动态DW。

string ls_string = ""
ls_string = "select 收支日期RQ , 收支项目XM , 收入金额SL , 支出金额ZC , 结余JY = isnull(收入金额SL - 支出金额ZC ,0) into #temp from @t"
execute immediate :ls_string using sqlca;

ls_string = "update #temp
set 结余JY=(select isnull(sum(收入金额SL - 支出金额ZC),0)
from #temp tt
where TT.收支日期RQ<=#temp.收支日期RQ)"
execute immediate :ls_string using sqlca;

ls_string = "select convert(varchar(10),收支日期RQ,120) as 收支日期RQ , 收支项目XM , 收入金额SL , 支出金额ZC , 结余JY from #temp"

string ls_syntax,ls_error
ls_Syntax = SQLCA.SyntaxFromSql(ls_string , "Style(Type=Grid)" , ls_Error)
//创建数据窗口
dw_export.Create(ls_Syntax , ls_Error)

dw_export.SetTransObject(sqlca)
dw_export.Retrieve()

ls_string = "drop table #temp"
execute immediate :ls_string using sqlca;


乌龟学堂http://www. 承接各种软件开发、系统集成、网络搭建。 QQ:124030710
2006-10-30 20:04
潇洒老乌龟
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:407
专家分:0
注 册:2005-12-13
得分:0 
你可以将6楼的代码放到SQL的查询分析器里面运行一下就明白了。

乌龟学堂http://www. 承接各种软件开发、系统集成、网络搭建。 QQ:124030710
2006-10-30 20:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-98835-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.273505 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved