注册 登录
编程论坛 SQL Server论坛

帐户付出资金分析

exvba 发布于 2010-08-13 16:14, 1055 次点击
SQl表(名: bxjj )如下

序号    日期    摘要    收或付    发生金额    帐户余额
1    2009-6-13    开户存入    收    50000    50000
2    2009-7-1    货款存入    收    20000    70000
3    2009-8-15    保险基金存入    收    90000    160000
4    2009-8-16    货款支出    付    30000    130000
5    2009-8-17    购货    付    50000    80000
6    2009-8-26    货款存入    收    40000    120000
7    2009-9-27    发放工资    付    90000    30000
8    2009-9-28    购配件    付    20000    10000

第3笔业务是保险基金存入9万元,属于移用保险基金的违规业务
现要查询此后发生的资金付出业务中,是否存在移用保险基金的违规问题。
是否移用保险基金计算思路提示如下:

 第3笔业务即保险基金存入9万元之前,帐户余额有7万元属于自有资金,第4笔付出3万元,自有资金还剩下4万元;第5笔付出5万元,则其中使用剩下的自有资金4万元、使用保险基金1万元;第6笔收入4万元,弥补了已经移用的保险基金1万元、自有资金最终还剩3万元;第7笔付出9万元,其中使用剩下的自有资金3万元、使用保险基金6万元;第7笔付出2万元,属于使用保险基金2万元。

  请用SQL语句插入一张新表( bxjj_2),在 bxjj表结构的基础上,增加一个字段:“移用保险基金数额”,该字段用于填写对每一笔付出业务注明移用保险基金的具体数额。结果如下:
序号    日期    摘要    收或付    发生金额    帐户余额    移用保险基金数额
1    2009-6-13    开户存入    收    50000    50000   
2    2009-7-1    货款存入    收    20000    70000   
3    2009-8-15    保险基金存入    收    90000    160000   
4    2009-8-16    货款支出    付    30000    130000   
5    2009-8-17    购货    付    50000    80000    10000
6    2009-8-26    货款存入    收    40000    120000   
7    2009-9-27    发放工资    付    90000    30000    60000
8    2009-9-28    购配件    付    20000    10000    20000


  现因业务中碰到,还请老师帮忙, 非常感谢您的帮助。
13 回复
#2
cnfarer2010-08-14 06:47
只凭这点信息是写不出通用的SQL语句的!
#3
exvba2010-08-14 06:59
cnfarer版主您好,如果单独就是解决这个例子,请问怎样写SQL语句?
#4
qingshuiliu2010-08-14 10:41
修改
declare @移用保险基金数额 int
declare @exist int
set @移用保险基金数额=cast((select sum(case when [摘要] like '%保险基金存入%' then [发生金额] else 0 end)
from bxjj where [收或付] like '%收%'
group by [收或付]) as int)

set @exist=
(select min(t.序号) as 序号 from
(select 序号 from [bxjj] where [摘要] like '%保险基金存入%') as t)
print @移用保险基金数额
print @exist
insert into bxjj1
SELECT [序号]
       ,[日期]
      ,[摘要]
      ,[收或付]
      ,[发生金额]
      ,[帐户余额]
      , cast(case when 序号>=@exist then
 (case when @移用保险基金数额-[帐户余额]>0
then (case when @移用保险基金数额-[帐户余额]>[发生金额] then [发生金额] else @移用保险基金数额-[帐户余额] end)
 else 0 end)
else 0 end as int)as 移用保险基金数额
         FROM  [bxjj]


[ 本帖最后由 qingshuiliu 于 2010-8-14 20:32 编辑 ]
#5
exvba2010-08-14 10:45
尊敬的qingshuiliu版主您好!运行后有点小差错:

服务器: 消息 208,级别 16,状态 1,行 3
对象名 'dbo.bxjj' 无效。
#6
qingshuiliu2010-08-14 10:54
你改为 bxjj就行了 或者[bxjj]
帖子我已经编辑了一下,
你在试试


[ 本帖最后由 qingshuiliu 于 2010-8-14 10:56 编辑 ]
#7
exvba2010-08-14 10:57
qingshuiliu版主您好!改为 bxjj不知怎么还是有错
#8
qingshuiliu2010-08-14 10:59
你把错误的完整代码贴出来看看
注意一些最基本的错误:
比如说,你要选中当前你要使用的数据库
否则,系统会找不到这张表的


[ 本帖最后由 qingshuiliu 于 2010-8-14 11:01 编辑 ]
#9
exvba2010-08-14 11:10
请版主稍等,我再试运行
#10
exvba2010-08-14 11:24
版主您好,重新运行后,没有出错,提示一行受上次影响,但我没看到查询结果,请问怎样看到结果,谢谢!
#11
qingshuiliu2010-08-14 11:32
数据插入表bxjj1中了
你自然要打开表bxjj1
查看结果了
#12
exvba2010-08-14 11:33
qingshuiliu版主您好!查询结果出来了,就是移用保险基金数额有点不对,麻烦您再看下,谢谢
=====================
序号    日期    摘要    收或付    发生金额    帐户余额    移用保险基金数额
1             2009-6-13    开户存入    收    50000    50000    0
2             2009-7-1    货款存入    收    20000    70000    0
3             2009-8-15    保险基金存入    收    90000    160000    0
4             2009-8-16    货款支出    付    30000    130000    0
5             2009-8-17    购货    付    50000    80000    10000
6             2009-8-26    货款存入    收    40000    120000    0
7             2009-9-27    发放工资    付    90000    30000    60000
8             2009-9-28    购配件    付    20000    10000    80000
                        

[ 本帖最后由 exvba 于 2010-8-14 11:37 编辑 ]
#13
exvba2010-08-14 11:41
qingshuiliu版主您好!您太厉害啦!结果是对的,是我搞错了。再谢谢您!
另外一点,如果最后一笔付出2万元,移用保险基金数额不是累计为8万元,而是就该笔的移用金额,即2万元,不知道能否修改一下
#14
qingshuiliu2010-08-14 20:31
我修改了四楼的回复,你再看看

[ 本帖最后由 qingshuiliu 于 2010-8-14 20:34 编辑 ]
1