那凶猛的客户,要我做‘对帐单’功能!如何对付!要求如下!急(100分)

  • 主题发起人 主题发起人 Mivier
  • 开始时间 开始时间
M

Mivier

Unregistered / Unconfirmed
GUEST, unregistred user!
日期 &nbsp; &nbsp; &nbsp; 摘要 &nbsp; &nbsp; &nbsp; &nbsp;收入 &nbsp; &nbsp; &nbsp;支出 &nbsp; &nbsp; 结余<br>20080301 &nbsp; 期初余额 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0<br>20080305 &nbsp; &nbsp; 销售 &nbsp; &nbsp; &nbsp; &nbsp;2000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2000<br>20080306 &nbsp; &nbsp; 收款 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1000 &nbsp; &nbsp; 1000<br>20080307 &nbsp; &nbsp; 销售 &nbsp; &nbsp; &nbsp; &nbsp;2000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3000<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;本期结存 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3000
 
做就是了,不知你觉得难度在哪里?
 
呵呵,结余是比较难写SQL的。
 
代码应该不难,就是他 的正负不分,统计不清,摸不着脑袋的要求!如果你做这样的东西给别人用,那会计估计要带钱来上班了!
 
不知怎么下SQL语句,SQL找出销售和收款的数据比较容易,但结余和上条记录的结余是有关系的,不知这个SQL要如何写
 
销售是+<br>收款是-
 
这种一般不会直接用 sql 可以解决的吧,我做过一个对账的,就是出入库对账,按日期来的,<br><br>要求显示出当天出入库的数还有当天的库存,我就是临时表给他做了
 
先得到下面的数据<br>日期 &nbsp; &nbsp; 发生额<br>20080301 0<br>20080305 2000<br>20080306 -1000<br>20080307 2000<br>再把发生额进行累加, 如果是Oracle的好处理。直接用sum(发生额) over(order by 日期)<br>最后把结存这行加上去
 
楼上的办法只能得到最后总的结余吧?<br>关注....
 
这种情况还是按记录循环处理好点。以前做过一个帐务处理系统,各种帐表的结余都是循环处理出来的。。。:D
 
大富翁上的高手现在越来越不多了,这个都没有人回答上来,看来我的跨天查询的问题不能提问了.<br>select a.[日期],a.[搞要],[收入]=insull([收入],0),[支出]=isnull([支出],0),[结余]=isnull([收入],0)-isnull([支出],0) from<br>(select distinct [日期]=convert(varchar(10),[date],120),[摘要] from t1) a left join<br>(select [日期]=convert(varchar(10),[date],120),[摘要],[收入]=isnull(sum(收入),0) from t1 group by convert(varchar(10),[摘要] ) on a.[日期]=b.[日期] and a.[摘要]=b.摘要 left join (select [日期]=convert(varchar(10),[date],120),[摘要],[支出]=isnull(sum(支出),0) from t1 group by convert(varchar(10),[摘要] ) c on a.[日期]=c.[日期] and a.[摘要]=c.摘要
 
select 日期, 摘要, 收入, 支出,<br>&nbsp; (select sum(收入)-sum(支出) from TableName t2 where t2.日期&lt;=t1.日期) as 结余<br>from TableName t1<br>where .... (这里写你分期的条件,即什么是“本期”)<br><br>“本期结存”需要另用一条语句或用 delphi 实现。
 
不建议 join 时的表是 select 出来的,因为有时这样生成的数据不对<br>我以前就是 join 的表就 select &nbsp;生成,后来发现数据根本不对,把 select 的数据生成到一个临时表就,再 join 这个临时表就数据就对了,不知为什么,所以现在不再 join 时用 select &nbsp;了
 
当成进销存来考虑就好了,一个隐藏的虚拟字段“期初”其实就是结余,可以在触发器中计算本次结余,<br>结余=期初+收入-支出,这里的期初就是日期小于当前日期的最大日期那笔结余<br>select top 1 where date&lt;当前日期 order by date desc
 
学习中,感觉每条记录发生都要结余,比较难!如果只是月底结余还可以!
 
1、在server端自定义函数(前提有一个字段能辨认出顺序,象例子,如果同一天有多行,函数的参数就不能用日期)<br>2、函数用不了的话,建议还是用本地表去做,先把内容拷下来,最后一列给个循环算出来。<br><br>2种方法第一种觉得比较正统,但数据的规范性比较严格,第二种比较好控制,但速度还有查询功能有限。
 
另,server的类型lz没有说明,ms和oracle在算这个方法好像不同,我只会mssql。
 
Select (abs( (select sum(isnull([收入],0)) from Table where [日期]&lt;=a.[日期]))<br>&nbsp; -abs((select sum(isnull([支出],0)) from Table where [日期]&lt;=a.[日期]))) as [结存] from Table a<br>得出来的就是结存量了
 
呵呵,你这也叫结存呀?<br><br>后期算出来的,那不算结存,这个数有什么意思?<br><br>应当是单据在过账时,就计算出当时结存数,并保存起来,然后报表再引用它。<br>这才叫结存!
 
楼上的意见有失偏颇哦,如果保存结存数,前面的单据金额就不能修改了,修改了大家都重算一遍,多累。<br><br>这样的报表经常做的,我也就总结出我说的那2种方法。
 
后退
顶部