我现在要写一个干部互评软件,由于公司干部层次较多,评价人员较广,层次不一,不同层次人员评价分数占的比重不同,所以评价规则我准备专门输准备一个表用来存储   初步将数据库设计成以下情况表一:评价规则表
字段:被评价层次ID
字段:评价层次ID
字段:评价层次占总分比重
字段:评价层次是否需要为本部门表二:层次表
字段:层次ID
字段:层次名表三:部门表
字段:部门ID
字段:部门名表四:干部信息表
字段:干部ID(主键)自增
字段:姓名
字段:层次ID
字段:部门ID表五:干部得分表
字段:干部ID
字段:姓名
字段:得分表六:干部评价他人记录表
字段:记录ID(主键)自增
字段:评价人ID
字段:被评价人ID
字段:评价分数数据库设计如上,现在问题是如何统计被评价人的分数,举个例子,比如这个人是财务部部长,因为评价他的人有集团领导,平级的部长,以及自己部门的员工,而且这三个层次占总分的比重分别是 50% 35% 15% 我准备写成存储过程,但是如何先按照层次把他们比重的分数算出来,再总和起来,请数据库高手能帮帮我提供个思路 

解决方案 »

  1.   

    测试数据在此 
    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