本帖最后由 cherishdqy 于 2017-4-8 23:58 编辑 先说明数据库(SQL SERVER 2008 R2)表字段及示例数据: 业务逻辑:集团:有2家单位,每个单位有不同的账户,每个账户都有自己的期初余额,每个账户每一天只要有收入金额或支出金额,就会在数据库中插入一条数据(和财务的出纳日记账类似,但这里的记录已经对当天该账户的所有收入和支出做了汇总),但不是每一天都会有记录。 需求:假设当前日期为2017-01-08,求出每一个账户近5天(2017-01-04至2017-01-08)的每天的结余(每天的结余=该账户的期初余额+小于等于该天的所有收入金额-小于等于该天的所有支出金额)。 即单位1的账户1: 2017-01-04的结余为:100+(10+30)-(0+0)=140 即期初余额(100)+1号至4号的收入总和(10+30)-1号至4号的支出总和(0+0) 2017-01-05的结余为:100+(10+30+20)-(0+0+0)=160 2017-01-06的结余为:160(6号没有发生记录,所以结余为5号的结余) 2017-01-07的结余为:100+(10+30+20+30)-(0+0+0+0)=190 2017-01-08的结余为:190(8号没有发生记录,所以结余为7号的结余) 其实最终的需求是要求出这个集团近5天的每一天的所有账户的结余的总和,作为集团近5天的每一天的结余,然后画出折线图。 这个需求想了一整天没想出最后的结果,提供一下我想到一半的思路:求出每个账户按日期计算的收入累计求和和支出累计求和,然后用每一天的期初余额+收入累计-支出累计即可得出每一天的结余,但是有个问题就是像账户1只能得到4、5、7号的结余,sql中有办法将没有的日期整出来么? 如果sql做不到,可以考虑用报表做,正在尝试中。。。但是考虑到源数据表目前三个月有七千多条数据,放到单元格中处理再隐藏行页面加载速度会慢,所以先发帖问一下有没有sql大神能用sql做出来。 @macro_hard @yets11 @zsh331 @gxy120313 @Poseidon @flyingsnake @真实姓名 不记得谁sql比较6了,先艾特一波~excel附件是两张图的数据~ |