一个对数据库表字段比较复杂的操作,高人进

来源:百度知道 编辑:UC知道 时间:2024/06/04 05:36:00
有三个个表,分别是员工积分表,部门积分表和销售记录
[employee]
ID, score, departmentID
[department]
ID, score
[saleLog]
ID, employeeID, count, addDate
employee就是员工积分表,ID为自动编号,score为员工的积分,departmentID为所在部门编号,对应department表的ID字段
department为部门积分表,ID为自动编号,score为部门积分
saleLog表是销售记录表,记录了每天(addDate)出勤的员工(employeeID)销售了多少件商品(count),其中employeeID与Employee表中的ID对应
现在简单列举一下数据如下
[employee]
ID score departmentID
1 56 1
2 37 1
3 49 2
[department]
ID score
1 1380
2 1863
[saleLog]
ID employeeID count addDate
1 1 5 2006-1-6
2 2 3 2006-1-6
3 1 2 2006-1-7
4 3 4 2006-1-7
……
99 1 2 2007-4-8
现在,公司决定:给所有在周末有销售成绩的员工按照其销售数量进行加分,每销售出一件加3分
就是说每个员工的score=score+3×加分日销售总数
同时,该员工所在部门的得分为其下属员工得分总分的10%
即score=score+部门员工总分÷10
请问如何高效率地实现这个加分操作?
关于哪天的销售成绩给分,哪天不给分,不是问题的关键,我们假设所有加分日都在一个集合里,表示的时候用 where addDat

1, saleLog 应该加一个字段 hasScore 默认为0, 加分后更新为1, 用于指示该记录是否已给员工加过分, 以免重复加分.
2, 同时,该员工所在部门的得分为其下属员工得分总分的10%, 这句话说的很模糊, 是你点击一次, 就一次加所有员工总分的10%还是特定员工(如周末有销售的员工)?
3, 数据库是Access, Update from的语句可以一试, 但可能不太好使, 如果是SQL Server就好了, 可写个存储过程, Update from, 再更新一下加分的记录. *******补充回答******* update from 是只更新和其他表连接相应的记录..即根据表B来更新表B, 比如只更新表A的积分和表B的积分相同的记录.而Access对于update from 的支持好像是有限的, 相应的表B不能是子查询, 必须是一个独立的表*******
4, 遍历的方式不可取, 真的要遍历的话, 可以一次统计出该加的分数再一条一条更新

Access下的update from具体且看参考资料