日期:2014-05-19  浏览次数:20624 次

高分求解,求思路
需求描述:
   统计公司一年的财务开销情况。大概是这样的。页面上大概要求如下
  月份  一月  二月   三月  四月......全年度
  收入  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
这样更方便计算。

------解决方案--------------------
引用:
我个觉得表这样设计更好:
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 "二月份",