高分求解,求思路
需求描述:
统计公司一年的财务开销情况。大概是这样的。页面上大概要求如下
月份 一月 二月 三月 四月......全年度
收入 100 -- -- 200 .... 300
支出 -- -- 200 50.... 250
合计 +100 -- -200 +150.... +50
页面大概就是这样的。数据如下:
id, 月份(时间), 金额, 类型(收/入) 。。。。其余字段不关注 数据库表中数据部分如下:
1 1 100 收入
2 3 200 支出
3 4 200 收入
4 4 50 支出
就是这么多了 ,然后问几个问题:
第一:要达到我上面页面的展示效果,请问这样设计数据库是否合理?不合理怎么设计!
第二:按照上面数据库的设计方式,请问sql语句该怎么写?是不是分组求和再排序?
第三:(重点)现在假如数据已经由sql语句处理好了那么我的service层应该怎么来做这个业务逻辑数据呢
既要分月算支出,收入,合计等还要当数据库中不存在该月的数据(如二月)时,页面也要默认的显
示出来--
谢谢各位朋友。感激不尽!学习了!
数据库
sql
service
业务逻辑
------解决方案--------------------我个觉得表这样设计更好:
id 月分 收入 支出
1 1 100 --
2 3 -- 200
这样更方便计算。
------解决方案--------------------我觉得这个可能更好一些吧
------解决方案--------------------你这样设计表可以的,sql可以参考2楼,至于如果没有2月记录,可以在程序中控制,初始化一个2月的空记录。
------解决方案--------------------楼主的设计可行!
水晶报表里面的交叉表可以满足楼主的效果,若自己可能需要自己组合list
或者直接在sql里面查出来。
------解决方案--------------------程序写的有点复杂,这样效率更低。直接用sql来整理好效率更高。
下面是例子,用的oracle,直接拷贝就行。
******数据准备*********
CREATE TABLE T (
month NUMBER NULL,
amount VARCHAR2(25) NULL,
AmountType VARCHAR2(25) NULL
)
GO
INSERT INTO T(month, amount, AmountType)
VALUES(1, 100, '收入')
GO
INSERT INTO T(month, amount, AmountType)
VALUES(1, 300, '支出')
GO
INSERT INTO T(month, amount, AmountType)
VALUES(3, 200, '支出')
GO
********sql*********
select a.AmountType "类型",a.money "一月份", b.money "二月份",