hur.cn - 华软网

 热门搜索

关于一个系统数据库设计的疑惑

  作者:未知    来源:网络    更新时间:2018/8/6
要做一个系统,大致功能如下:每月分配给职工n项任务,月底要针对职工个人以及职工所在部门部门进行统计,并要求计算出当月完成率,季度完成率,和年度完成率!
我现在的数据库大致如下:

职工任务表 中有如下字段
职工id 职工姓名 职工当月应完成任务数 A任务实际完成数 B任务实际完成数 c任务实际完成数 当月实际完成数 当月完成率 季度累计完成数 季度完成率

科室月统计表 中有如下字段 
科室id 科室名称 科室当月应完成任务数 A任务实际完成数 B任务实际完成数 c任务实际完成数 当月实际完成数 当月完成率 季度累计完成数 季度完成率 当月人均 累计人均

每月输入基本的信息后( 职工id  职工姓名 A任务实际完成数 B任务实际完成数 c任务实际完成数),进行其他选项的计算.现在我虽然只用400多条记录,但是计算其他选项的时间却超过乐10分钟,有点难以忍受!
请问兄弟们有什么好的办法没有!我感觉数据库写的不太爽啊!
附:sw:access2003+odbc+pb9 hw:c2.4+256

------华软网友回答------
那些需要计算的选项究竟要怎么办?是写死到数据库中,还是在提取数据的时候在计算!我现在只是需要每月输入一次基本数据,提取统计数据,生成一次报表!
------华软网友回复------
喂,有人吗?
------华软网友回复------
1.400行数据就要10分钟?速度奇慢! 速度慢应该是SQL写得差,把你的SQL语句贴出来看看. 如果你不是用SQL语句来实现,而是用pb自己写算法实现的话也可以.

2.pb9建议用oledb连接,效率更好.
------华软网友回复------
建议数据库中只保存基本数据,其他各个计算出来的结果在查询报表数据时动态生成,而且计算过程不要由服务器端执行,而通过计算域由客户端执行
------华软网友回复------
不是吧,10分钟???
------华软网友回复------
难以置信
------华软网友回复------
我写了好多嵌入试的sql,用了好多select 函数去判断记录的存在,并且好多是在循环中的。应该是这个原因吧?请问sql应该怎么写啊?
以下面着个表为例子,我说说我的写法
职工任务表 中有如下字段
职工id 职工姓名 职工当月应完成任务数 A任务实际完成数 B任务实际完成数 c任务实际完成数 当月实际完成数 当月完成率 季度累计完成数 季度完成率
首先循环一遍全部记录 计算当月实际完成数 , 当月完成率
然后按月循环,计算季度累计完成数
我实在想不到还有什么好的办法,兄弟门给侃侃,我是以年度为单位计算的,
在线等啊!!!
------华软网友回复------
先做几个database view,所需数据从dataview中提取,尽量不要用循环.
=============================================================
powerbuilder qq群:6348245

------华软网友回复------
流程已经知道了,写程序应该不难了吧。。。。
呵呵,要优化运算方式,也就是算法。。。。
------华软网友回复------
to ribut9225(幽灵庄主):兄弟帮忙啊?
------华软网友回复------
可以用view或者存储过程 + 临时表,那样执行效率较高
------华软网友回复------
请加入适当冗余减少嵌套的SQL
------华软网友回复------
恩,谢谢各位了,我今天去试试
------华软网友回复------
昨天我把一些代码改成了聚合函数的方式,果然速度大快!看来就是这个原因了!不过还有一些不知道怎么改,大家再给侃侃!
现有表格式如下:

编号 年分 月份 姓名  部门  任务一 任务二 任务三  当月总计 季度总计 年度总计
1     2005 1    aa     XX   100      200     300
1     2005 1    bb     XX   100      200     300
1     2005 2    aa     XX   100      200     300
1     2005 2    bb     XX   100      200     300
1     2005 3    aa     XX   100      200     300
1     2005 3    bb     XX   100      200     300
1     2005 4    aa     XX   100      200     300
1     2005 4    bb     XX   100      200     300
1     2005 5    aa     XX   100      200     300
1     2005 5    bb     XX   100      200     300
1     2005 6    aa     XX   100      200     300
1     2005 6    bb     XX   100      200     300

已经知道的数据如上,现在要计算 季度总计 年度总计 等2项,请问sql应该怎么写?
另外:这样的格式是否合法?update Atable set colA=(select colA from Btable where btable.colb=btable.colb)

------华软网友回复------
唉,楼主还是先恶补一下数据库基础知识的先。
------华软网友回复------
是呀,我想也是的,不过现在手头没有什么资料,想先把这个问题解决了再说
------华软网友回复------
update Atable set colA=(select colA from Btable where btable.colb=Atable.colb)???
ok!
------华软网友回复------
关注
------华软网友回复------
难道楼主用循环来计算?建议楼主补习一下聚合函数的知识。计算数据没必要写死,可以用数据窗口的计算列或者用数据库的视图功能显示,数据库中只要保留基本数据即可。
------华软网友回复------
to  Libra_Chen(旗舰-巴巴罗萨) (:刚开始是那样写的,现在改了,那样速度太慢了!
现在利用一个表储存基础数据,然后计算.就是季度累计和年度累计不知道用sql怎么写.
还有,我用update Atable set colA=(select colA from Btable where btable.colb=Atable.colb)这样的格式,老是提示错误,说什么必须是一个可更新的查询
------华软网友回复------
我用计算的季度累计是:如果是这个季度的第一个月,季度累计=这个月数据
第二个月=第一个月+第二哥月.....年度累计是从1月到当前月的记录!我现在能用select选择出季度累计,但是当用在update table set jdlj=(select.....)中的时候,老是出错,提示什么必须是一个可更新的查询
------华软网友回复------
因该不难。用存储过程。补习sql吧      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。