我现在要写一个干部互评软件,由于公司干部层次较多,评价人员较广,层次不一,不同层次人员评价分数占的比重不同,所以评价规则我准备专门输准备一个表用来存储 初步将数据库设计成以下情况表一:评价规则表
字段:被评价层次ID
字段:评价层次ID
字段:评价层次占总分比重
字段:评价层次是否需要为本部门表二:层次表
字段:层次ID
字段:层次名表三:部门表
字段:部门ID
字段:部门名表四:干部信息表
字段:干部ID(主键)自增
字段:姓名
字段:层次ID
字段:部门ID表五:干部得分表
字段:干部ID
字段:姓名
字段:得分表六:干部评价他人记录表
字段:记录ID(主键)自增
字段:评价人ID
字段:被评价人ID
字段:评价分数数据库设计如上,现在问题是如何统计被评价人的分数,举个例子,比如这个人是财务部部长,因为评价他的人有集团领导,平级的部长,以及自己部门的员工,而且这三个层次占总分的比重分别是 50% 35% 15% 我准备写成存储过程,但是如何先按照层次把他们比重的分数算出来,再总和起来,请数据库高手能帮帮我提供个思路
字段:被评价层次ID
字段:评价层次ID
字段:评价层次占总分比重
字段:评价层次是否需要为本部门表二:层次表
字段:层次ID
字段:层次名表三:部门表
字段:部门ID
字段:部门名表四:干部信息表
字段:干部ID(主键)自增
字段:姓名
字段:层次ID
字段:部门ID表五:干部得分表
字段:干部ID
字段:姓名
字段:得分表六:干部评价他人记录表
字段:记录ID(主键)自增
字段:评价人ID
字段:被评价人ID
字段:评价分数数据库设计如上,现在问题是如何统计被评价人的分数,举个例子,比如这个人是财务部部长,因为评价他的人有集团领导,平级的部长,以及自己部门的员工,而且这三个层次占总分的比重分别是 50% 35% 15% 我准备写成存储过程,但是如何先按照层次把他们比重的分数算出来,再总和起来,请数据库高手能帮帮我提供个思路
USE MASTER
IF EXISTS (SELECT * FROM sysdatabases WHERE NAME = 'DB_EvaluationSystem')
DROP DATABASE DB_EvaluationSystem
CREATE DATABASE DB_EvaluationSystem
ON
( NAME = 'DB_EvaluationSystem', --主数据库文件的逻辑名
FILENAME = 'D:\DB_EvaluationSystem.MDS', --主数据库文件的物理名
SIZE = 5MB, --主数据库的初始大小
FILEGROWTH = 10% --主数据文件的增长率
)
LOG ON
(
NAME = 'DB_EvaluationSystem_LOG',
FILENAME = 'D:\DB_EvaluationSystem.MDS',
SIZE = 2MB,
FILEGROWTH = 15%
)
GO /*----创建表 ES_Rules ----*/
USE DB_EvaluationSystem
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ES_Rules')
DROP TABLE ES_Rules
CREATE TABLE ES_Rules
(
Rules_ID int identity(1,1), --记录ID,主键 自增字段:
Rules_BeEvaLevelID int, --被评价层次ID
Rules_EvaLevelID int, --评价层次ID
Rules_rate numeric(2,1), --评价层次占总分比重
Rules_NeedSame int --评价层次是否需要为本部门
)
GO
insert ES_Rules(Rules_BeEvaLevelID,Rules_EvaLevelID,Rules_rate,Rules_NeedSame)
select 1,1,0.5,0 union all
select 1,2,0.4,0 union all
select 1,3,0.3,0 union all
select 1,4,0.2,0 union all
select 2,1,0.6,0 union all
select 2,2,0.5,0 union all
select 2,3,0.4,0 /*----创建表 ES_Level ----*/
USE DB_EvaluationSystem
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ES_Level')
DROP TABLE ES_Level
CREATE TABLE ES_Level
(
Level_ID int identity(1,1), --层次ID,主键 自增
Level_Name nvarchar(15) --层次名
)
GO insert ES_Level(Level_Name)
select '集团领导' union all
select '部门经理' union all
select '员工' /*----创建表 ES_Dep ----*/
USE DB_EvaluationSystem
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ES_Dep')
DROP TABLE ES_Dep
CREATE TABLE ES_Dep
(
Dep_ID int identity(1,1), --部门ID,主键 自增
Dep_Name nvarchar(15) --部门名
)
GO
insert ES_Dep(Dep_Name)
select '财务部' union all
select '人事部' union all
select '其他' /*----创建表 ES_LeadInfo ----*/
USE DB_EvaluationSystem
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ES_LeadInfo')
DROP TABLE ES_LeadInfo
CREATE TABLE ES_LeadInfo
(
LeadInfo_ID int identity(1,1), --干部信息ID,主键 自增
LeadInfo_Name nvarchar(15), --干部姓名
Level_ID int, --干部层次ID
Dep_ID int --干部部门ID
)
GO
insert ES_LeadInfo(LeadInfo_Name,Level_ID,Dep_ID)
select '刘文杰',1,1 union all
select '沈诗铭',1,2 union all
select '李丹',2,1 union all
select '邱菁峰',3,1
/*----创建表 ES_EvaList ----*/
USE DB_EvaluationSystem
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ES_EvaList')
DROP TABLE ES_EvaList
CREATE TABLE ES_EvaList
(
EvaList_ID int identity(1,1), --评价记录ID,主键 自增
EvaList_EvaID int, --评价人ID
EvaList_BeEvaID int, --被评价人ID
EvaList_Num int --评价分数
)
GO
insert ES_EvaList(EvaList_EvaID,EvaList_BeEvaID,EvaList_Num)
select 3,1,50 union all
select 2,3,30 union all
select 4,2,30 union all
select 1,3,60