CREATE TABLE [dbo].[Sw_Users](--用户表
[id] [int] IDENTITY(1,1) NOT NULL,
[username] [varchar](20) NULL,--用户名不重复
[pwd] [varbinary](50) NULL,
[name] [varchar](10) NULL,--姓名(部门多可能重复)
[sex] [varchar](4) NULL,
[dept] [varchar](20) NULL,--部门名称
[job] [varchar](20) NULL,--职位(主任,副主任,职员,分公司主任)
[Tel] [varchar](10) NULL,
[Fax] [varchar](10) NULL,
[Email] [varchar](20) NULL,
[lishu] [int] NULL CONSTRAINT [DF_Sw_Users_lishu]  DEFAULT ((0)),--职员隶属于本中心主任
[pid] [int] NULL CONSTRAINT [DF_users_pid]  DEFAULT ((0)),
[Fettle] [varchar](4) NULL CONSTRAINT [DF_Sw_Users_Fettle]  DEFAULT ('正常'),
[Roles] [varchar](10) NULL,
 CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]CREATE TABLE [dbo].[Sw_Month](--月度考核表,每个月17个分公司的17个用户给4个中心的员工评分,每个中心一个主任,每位员工也要给除了自己以外的员工(包括其它中心的员工)打分,分别写入这个表
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](8) NULL,--被评分人姓名
[username] [nchar](20) NULL,--被评分人用户名(怕重复记录了用户名)
[dept] [nvarchar](20) NULL,--被评分人所在的中心名称
[assesstime] [int] NULL,--考核月份(如:200706)
[plans] [float] NULL,--考核项目1
[availability] [float] NULL,--考核项目2
[exercisable] [float] NULL,--考核项目3
[attitude] [float] NULL,--考核项目4
[quality] [float] NULL,--考核项目5
[efficiency] [float] NULL,--考核项目6
[explain] [nvarchar](50) NULL,
[communicate] [nvarchar](500) NULL,
[addtime] [smalldatetime] NULL CONSTRAINT [DF_Sw_Month_addtime]  DEFAULT (getdate()),--记录添加时间
[addguy] [nvarchar](20) NULL,--考核人(打分的人的用户名)
[proportion] [int] NULL,--打分人所占的权重(随后详细解释)
 CONSTRAINT [PK_Sw_Month] PRIMARY KEY CLUSTERED 
(
[id] DESC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO每个人的每个考核项目最终得分=(17个分公司打分的平均分)×10%+本中心主任打分×50%+(其它三个中心主任打分的平均分)×10%+(本部门员工打分的平均分)×20%+(其它中心员工打分的平均分)×10%
在加入记录前我做过判断,每个打分人相对于被打分人的权重都记入了:proportion字段,50%就记录为:50.
就是以下六个考核项目:
[plans] [float] NULL,--考核项目1
[availability] [float] NULL,--考核项目2
[exercisable] [float] NULL,--考核项目3
[attitude] [float] NULL,--考核项目4
[quality] [float] NULL,--考核项目5
[efficiency] [float] NULL,--考核项目6打分主体:
总公司市场部下属四个中心,有四名主任
17个分公司17个分公司市场部主任
4个部门员工本身被打分主体:
4个部门员工本身要求一个查询列出
姓名    项目1得分    项目2得分   项目3得分   项目4得分   项目5得分   项目6得分   6个项目总和张三       4.5      3.9          4.5           2.3           4.5       19.7.....................................................................
........................................................................所有员工平均分:...         ...          ...          ...          ...   ...     平均总分
不知道我说清楚了没,数据库是sqlserver2005,不知道表结构是不是还算合理。

解决方案 »

  1.   

    在SQL Server 2000里应该可以用 case when 结合 group by 以及 with rollup 来实现。
      

  2.   

    select s.name,avg(c.plans) as plans,avg(c.availability) as availability,avg(c.exercisable) as exercisable,avg(c.attitude) as attitude,avg(c.quality) as quality,avg(c.efficiency) as efficiency,avg(c.plans)+avg(c.availability)+avg(c.exercisable)+avg(c.attitude)+avg(c.quality)+avg(c.efficiency) as scount from sw_month c left join sw_users s on s.name=c.name where c.assesstime="200706" group by s.name,s.pid order by s.pid desc
      

  3.   

    另,楼主在月度考核表中使用用户名而不使用用户ID,可能会对统计汇总工作造成一定的问题建议将用户名更换成用户ID
      

  4.   

    [proportion] [int] NULL,--打分人所占的权重(随后详细解释)每个人的每个考核项目最终得分=(17个分公司打分的平均分)×10%+本中心主任打分×50%+(其它三个中心主任打分的平均分)×10%+(本部门员工打分的平均分)×20%+(其它中心员工打分的平均分)×10%在加入记录前我做过判断,每个打分人相对于被打分人的权重都记入了:proportion字段,50%就记录为:50.------------------------------------------------------------------
    这个公司跟权重挂上钩了吗?
      

  5.   

    select s.name,s.dept,isnull(m.plans1,0)*0.1+isnull(n.plans2,0)*0.5+isnull(l.plans3,0)*0.1+isnull(k.plans4,0)*0.2+isnull(p.plans5,0)*0.1 as plans from 
    (select username,avg(plans) as plans1 from sw_month where addguy in (select username from sw_users where job='分公司主任') group by username,plans) m,
    (select username,plans as plans2 from sw_month where proportion=50 group by username,plans) n,
    (select username,avg(plans) as plans3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) group by username,plans) l,
    (select username,avg(plans) as plans4 from sw_month where addguy in (select username from sw_users where job='职员' and dept='中心1') group by username,plans) k,
    (select username,avg(plans) as plans5 from sw_month where addguy in (select username from sw_users where job='职员' and dept<>'中心1') group by username,plans) p 
    left join sw_users s on s.name=m.username and s.name=n.username and s.name=l.username and s.name=k.username and s.name=p.username 
    group by s.username
      

  6.   

    分几步来走:
    1.利用GROUP BY 语句,统计出[17个分公司打分的平均分] [本中心主任打分] [其它三个中心主任打分的平均分] [本部门员工打分的平均分] [其它中心员工打分的平均分]
    2.利用Case When语句对每个不同分类进行相应的计算(由于不清楚楼主分类的标准,在此仅做简单的说明)
      Select assesstime,username,SUM(
         Case when 分类='17个分公司打分' then 考核1*0.1
         when 分类='本中心主任打分' then 考核1*0.5
         when 分类='其它三个中心主任打分' then 考核1*0.1
         when 分类='本部门员工打分' then 考核1*0.2
         when 分类='其它中心员工打分' then 考核1*0.1
         END
      ),....... From  Sw_Month Group By assesstime,username语句不完整,请不要直接执行
      

  7.   

    to:xiequanqin(新的一天,新的起点!) 挂上了,加入记录前有个判断,
    if(打分人是被打分人的主任)
    权限=50
    elseif(打分人是分公司的)
    权限=10
    elseif(打分人跟被打分人一个中心)
    权限=20
    else
    权限=10
      

  8.   

    to:sxycgxj(云中客)我没有加入分类,不过可以在插入的时候加上这个字段
    你的思路我觉得可以。
      

  9.   

    select s.name,s.dept,isnull(m.plans1,0)*0.1+isnull(n.plans2,0)*0.5+isnull(l.plans3,0)*0.1+isnull(k.plans4,0)*0.2+isnull(p.plans5,0)*0.1 as plans from 
    (select username,avg(plans) as plans1 from sw_month where addguy in (select username from sw_users where job='分公司主任') group by username,plans) m,
    (select username,plans as plans2 from sw_month where proportion=50 group by username,plans) n,
    (select username,avg(plans) as plans3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) group by username,plans) l,
    (select username,avg(plans) as plans4 from sw_month where addguy in (select username from sw_users where job='职员' and dept='中心1') group by username,plans) k,
    (select username,avg(plans) as plans5 from sw_month where addguy in (select username from sw_users where job='职员' and dept<>'中心1') group by username,plans) p 
    left join sw_users s on s.name=m.username and s.name=n.username and s.name=l.username and s.name=k.username and s.name=p.username 
    group by s.username
    这个提示:消息4104,级别16,状态1,第1行
    无法绑定由多个部分组成的标识符 “m.username”.
    这个提示:消息4104,级别16,状态1,第1行
    无法绑定由多个部分组成的标识符 “n.username”.
    这个提示:消息4104,级别16,状态1,第1行
    无法绑定由多个部分组成的标识符 “l.username”.
    这个提示:消息4104,级别16,状态1,第1行
    无法绑定由多个部分组成的标识符 “k.username”.
    语法没有错误,执行的时候出错。
      

  10.   

    哦那swsky(安得广厦千万间,大庇天下寒士俱欢颜) ( ) 信誉:100    Blog   加为好友 
    select s.name,avg(c.plans) as plans,avg(c.availability) as availability,avg(c.exercisable) as exercisable,avg(c.attitude) as attitude,avg(c.quality) as quality,avg(c.efficiency) as efficiency,avg(c.plans)+avg(c.availability)+avg(c.exercisable)+avg(c.attitude)+avg(c.quality)+avg(c.efficiency) as scount from sw_month c left join sw_users s on s.name=c.name where c.assesstime="200706" group by s.name,s.pid order by s.pid desc这种解法就可以了,中间的数值/100 稍加调整就
      

  11.   

    select s.name,avg(c.plans*proportion)/100 as plans,avg(c.availability*proportion)/100 as availability,avg(c.exercisable*proportion)/100 as exercisable,avg(c.attitude*proportion)/100 as attitude,avg(c.quality*proportion)/100 as quality,avg(c.efficiency*proportion)/100 as efficiency,avg(c.plans*proportion)/100+avg(c.availability)+avg(c.exercisable)+avg(c.attitude)+avg(c.quality*proportion)/100+avg(c.efficiency*proportion)/100 as scount from sw_month c left join sw_users s on s.name=c.name where c.assesstime="200706" group by s.name,s.pid order by s.pid desc
      

  12.   

    to:xiequanqin(新的一天,新的起点!) 那个没有按公式走,结果不是想要的!
      

  13.   

    swazn_yj(菩提本无树) ( ) 信誉:98    Blog   加为好友  2007-06-29 11:14:04  得分: 0  
     
     
       to:xiequanqin(新的一天,新的起点!) 挂上了,加入记录前有个判断,
    if(打分人是被打分人的主任)
    权限=50
    elseif(打分人是分公司的)
    权限=10
    elseif(打分人跟被打分人一个中心)
    权限=20
    else
    权限=10
      
    -------------------------------------------------
    权限=权重?
    权重已经在proportion字段体现了,当然,直接求平均值就可以了!你的公式,已经体现在proportion字段里面了!
      

  14.   

    分几步来走:
    1.利用GROUP BY 语句,统计出[17个分公司打分的平均分] [本中心主任打分] [其它三个中心主任打分的平均分] [本部门员工打分的平均分] [其它中心员工打分的平均分]
    2.利用Case When语句对每个不同分类进行相应的计算(由于不清楚楼主分类的标准,在此仅做简单的说明)
      Select assesstime,username,SUM(
         Case when 分类='17个分公司打分' then 考核1*0.1
         when 分类='本中心主任打分' then 考核1*0.5
         when 分类='其它三个中心主任打分' then 考核1*0.1
         when 分类='本部门员工打分' then 考核1*0.2
         when 分类='其它中心员工打分' then 考核1*0.1
         END
      ),....... From  Sw_Month Group By assesstime,username语句不完整,请不要直接执
      

  15.   

    to:xiequanqin(新的一天,新的起点!) 
    我设计表的时候是想直接计算的,但是有点疏忽的是权重有相同的并不能区分五种情况。
      

  16.   

    哦那就要考虑用  sxycgxj(云中客) ( ) 信誉:100    Blog   加为好友  2007-06-29 11:13:05  得分: 0  
     
     
       分几步来走:
    1.利用GROUP BY 语句,统计出[17个分公司打分的平均分] [本中心主任打分] [其它三个中心主任打分的平均分] [本部门员工打分的平均分] [其它中心员工打分的平均分]
    2.利用Case When语句对每个不同分类进行相应的计算(由于不清楚楼主分类的标准,在此仅做简单的说明)
      Select assesstime,username,SUM(
         Case when 分类='17个分公司打分' then 考核1*0.1
         when 分类='本中心主任打分' then 考核1*0.5
         when 分类='其它三个中心主任打分' then 考核1*0.1
         when 分类='本部门员工打分' then 考核1*0.2
         when 分类='其它中心员工打分' then 考核1*0.1
         END
      ),....... From  Sw_Month Group By assesstime,username语句不完整,请不要直接执行
      
     ----------------------------------------------
    这种写法了
      

  17.   

    不改结构的情况下,关联 [dbo].[Sw_Users]表的
    [job] [varchar](20) NULL,--职位(主任,副主任,职员,分公司主任)
    字段,
    根据job生成权重proportion如果只是疏忽导致proportion不对,直接通过Sw_UsersUpdate其他的不变要么,增加权重对照表的临时表也可以。不然,每个字段都根据job生成CASE就比较麻烦了
      

  18.   

    to:xiequanqin(新的一天,新的起点!) 权重是相对的,不是固定的,只能在打分的时候根据关系判断,不能直接写进sw_users表
      

  19.   

    可以写入Sw_Month 这个表吗?根据 Sw_Users.dept、Sw_Users.job
    以及 Sw_Month.id、 Sw_Month.dept、Sw_Month.addguy。。
    应该可以算出正确的Sw_Month.proportion方法1:直接把Sw_Month.proportion Update成正确的值再统计
    方法2:在统计语句中生成proportion ——不推荐如果Sw_Month.proportion 的取值规则没法定义好,那么,想通过其他方式统计正确的结果,也是不可能的!
      

  20.   

    这个值是写进去sw_month的,但是并不能用来区分5种情况。
      

  21.   

    每个人的每个考核项目最终得分=(17个分公司打分的平均分)×10%+本中心主任打分×50%+(其它三个中心主任打分的平均分)×10%+(本部门员工打分的平均分)×20%+(其它中心员工打分的平均分)×10%-------------------------------------------------------
    主要问题在于按照什么分组因为有多个都是按10%计算,也就是权重一样,所以按照[proportion]分组是不行的,[proportion]字段就是冗余字段了职位(主任,副主任,职员,分公司主任),这里有三个“主任”,那“本中心主任”、“其它三个中心主任”的职位是“主任”还是包括了其他的两个?(这个有满意的解释的话可以用职务分组)关于用户表的字段
    [lishu] [int] NULL CONSTRAINT [DF_Sw_Users_lishu]  DEFAULT ((0)),--职员隶属于本中心主任
    主任的[lishu]是自己还是什么?这个提问时区分“本中心主任”和“其它三个中心主任”的关键ps:
    总体感觉,楼主的设计抛开了组织架构,直接用用户之间的关系来表示上下级关系是这个语句很难写的重要原因
      

  22.   

    to:Haiwer(海阔天空)
    主要问题在于按照什么分组因为有多个都是按10%计算,也就是权重一样,所以按照[proportion]分组是不行的,[proportion]字段就是冗余字段了职位(主任,副主任,职员,分公司主任),这里有三个“主任”,那“本中心主任”、“其它三个中心主任”的职位是“主任”还是包括了其他的两个?(这个有满意的解释的话可以用职务分组)
    -----------------------------------------------------------------
    实际上4个中心里只有市场部本部的主任是正主任也是其它三个副主任的头,职位里显示是:
    姓名:张三   部门:市场部本部  职位:主任
    姓名:李四    部门:信息化中心  职位:副主任
    姓名:王五   部门:支撑中心    职位:副主任
    姓名:刘波   部门:客服中心    职位:副主任
    -------------------------------------------------------------------------------
    关于用户表的字段
    [lishu] [int] NULL CONSTRAINT [DF_Sw_Users_lishu]  DEFAULT ((0)),--职员隶属于本中心主任
    主任的[lishu]是自己还是什么?这个提问时区分“本中心主任”和“其它三个中心主任”的关键
    ----------------------------------------------------------------------------------
    三个副主任lishu于本部的正主任
    但是这个不足于固定分组,因为公式里面说了:自己部门和其他部门的主任对自己的权重不同,自己部门的职员和其它部门的职员对自己的权重也不同。只能动态分组了。select s.name,s.dept,isnull(m.plans1,0)*0.1+isnull(n.plans2,0)*0.5+isnull(l.plans3,0)*0.1+isnull(k.plans4,0)*0.2+isnull(p.plans5,0)*0.1 as plans from 
    (select username,avg(plans) as plans1 from sw_month where addguy in (select username from sw_users where job='分公司主任') group by username,plans) m,
    (select username,plans as plans2 from sw_month where proportion=50 group by username,plans) n,
    (select username,avg(plans) as plans3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) group by username,plans) l,
    (select username,avg(plans) as plans4 from sw_month where addguy in (select username from sw_users where job='职员' and dept='中心1') group by username,plans) k,
    (select username,avg(plans) as plans5 from sw_month where addguy in (select username from sw_users where job='职员' and dept<>'中心1') group by username,plans) p 
    left join sw_users s on s.name=m.username and s.name=n.username and s.name=l.username and s.name=k.username and s.name=p.username 
    group by s.username
    这个思路是对的,但是执行的时候有错误,哪位高手能改正一下就好了!
      

  23.   

    To:Haiwer(海阔天空) 
    你说的完全有可能,就是怕打分途中就发生人员变动,正发愁呢
    完全可以改设计,能帮我重新设计一下表结构吗?所有的表都可以改。
      

  24.   

    select s.name,s.dept,isnull(m.plans1,0)*0.1+isnull(n.plans2,0)*0.5+isnull(l.plans3,0)*0.1+isnull(k.plans4,0)*0.2+isnull(p.plans5,0)*0.1 as plans from 
    sw_users s left join 
    (select username,avg(plans) as plans1 from sw_month where addguy in (select username from sw_users where job='地市用户') group by username,plans) m on s.username=m.username
    left join
    (select username,plans as plans2 from sw_month where proportion=50 group by username,plans) n on s.username=n.username
    left join
    (select username,avg(plans) as plans3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) group by username,plans) l on s.username=l.username
    left join
    (select username,avg(plans) as plans4 from sw_month where addguy in (select username from sw_users where job='职员' and dept='市场部信息化中心') group by username,plans) k on s.username=k.username
    left join
    (select username,avg(plans) as plans5 from sw_month where addguy in (select username from sw_users where job='职员' and dept<>'市场部信息化中心') group by username,plans) p on s.username=p.username
    group by s.name,s.dept,m.plans1,n.plans2,l.plans3,k.plans4,p.plans5
      

  25.   

    楼上的没错误了,但是查出来都是两个人名,两个plans的值还不一样,为什么呢?
    张三    信息化中心  1.8
    张三    信息化中心  2.6
    李四    市场部本部  1.8
    李四    市场部本部  2.6
      

  26.   

    而且部门只能是一个改成这样也不对了,
    select s.name,s.dept,isnull(m.plans1,0)*0.1+isnull(n.plans2,0)*0.5+isnull(l.plans3,0)*0.1+isnull(k.plans4,0)*0.2+isnull(p.plans5,0)*0.1 as plans from 
    sw_users s left join 
    (select username,avg(plans) as plans1 from sw_month where addguy in (select username from sw_users where job='地市用户') group by username,plans) m on s.username=m.username
    left join
    (select username,plans as plans2 from sw_month where proportion=50 group by username,plans) n on s.username=n.username
    left join
    (select username,avg(plans) as plans3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) group by username,plans) l on s.username=l.username
    left join
    (select username,avg(plans) as plans4 from sw_month where addguy in (select username from sw_users where job='职员' and dept=s.dept) group by username,plans) k on s.username=k.username
    left join
    (select username,avg(plans) as plans5 from sw_month where addguy in (select username from sw_users where job='职员' and dept<>s.dept) group by username,plans) p on s.username=p.username
    group by s.name,s.dept,m.plans1,n.plans2,l.plans3,k.plans4,p.plans5
      

  27.   

    select s.name,s.dept,m.plans1,n.plans2,l.plans3,k.plans4,p.plans5,isnull(m.plans1,0)*0.1+isnull(n.plans2,0)*0.5+isnull(l.plans3,0)*0.1+isnull(k.plans4,0)*0.2+isnull(p.plans5,0)*0.1 as plans
    from sw_users s 
    left join 
    (select username,avg(plans) as plans1 from sw_month where addguy in (select username from sw_users where job='地市用户') group by username) m on m.username=s.username
    left join
    (select username,plans as plans2 from sw_month where proportion=50) n on n.username=s.username
    left join
    (select username,avg(plans) as plans3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) group by username) l on l.username=s.username
    left join
    (select username,avg(plans) as plans4 from sw_month where addguy in (select username from sw_users where job='职员' and dept='市场部信息化中心') group by username) k on k.username=s.username
    left join
    (select username,avg(plans) as plans5 from sw_month where addguy in (select username from sw_users where job='职员' and dept<>'市场部信息化中心') group by username) p on p.username=s.username
    where s.dept='市场部信息化中心' and s.job='职员'
    order by s.pid desc
    一步一步来,上面这个可以调出一个部门的了!
      

  28.   

    上面这个可以了,但是我用.net做的程序,
    不知道怎么嵌套循环输出,
    就是先查询出部门名称,然后循环执行上面那个SQL语句,然后绑定数据。
    哪位.net高手能给个提示?不胜感激!!!
      

  29.   

    swsky(安得广厦千万间,大庇天下寒士俱欢颜) ( ) 信誉:100    Blog   加为好友  2007-06-29 14:58:57  得分: 0  
     
     
       楼上的没看懂不要瞎说,楼主就是每个角色打分都在这个表里放着的。
      
     
    --------------------------------------------------------------------
    不知道是不是真有一个明白的了~每个人的每个考核项目最终得分=(17个分公司打分的平均分)×10%+本中心主任打分×50%+(其它三个中心主任打分的平均分)×10%+(本部门员工打分的平均分)×20%+(其它中心员工打分的平均分)×10%基本上,每个员工都要帮其他人评分。只不过,职务不同,他所有评价的对象以及范围不太一样。只要评价当时数据对了,后期职务、人员的变动,不应该影响到变动之前的评分。其实,只要几点弄清楚了,事情没那么复杂:
    1、普通员工是不是也要给主任评分?(主任也参与评分?那么这个公司对他就不适合了。。)
    2、主任除了以主任的身份给其他员工评分,是不是还要以普通员工的身份再给其他员工评分?如果2者的答案都是“NO”,那么:
    主任需要评分的对象:
    1、本中心所有员工——以本中心主任的身份(proportion =50%)
    2、其他中心所有员工——以其他中心主任的身份(proportion =10%)普通员工需要评分:
    1、本部门员工——以本部门员工的身份(proportion =20%)
    2、其他部门所有员工——以其他部门员工的身份(proportion =10%)
    3、17个分公司所有员工——以17个分公司员工的身份(proportion =10%)可能考虑的不够周到,但是,弄清楚肯定是可以的
      

  30.   

    sxycgxj(云中客) ( ) 信誉:100    Blog   加为好友  2007-6-29 11:13:05  得分: 0  
     
     
       
    分几步来走:
    1.利用GROUP BY 语句,统计出[17个分公司打分的平均分] [本中心主任打分] [其它三个中心主任打分的平均分] [本部门员工打分的平均分] [其它中心员工打分的平均分]
    2.利用Case When语句对每个不同分类进行相应的计算(由于不清楚楼主分类的标准,在此仅做简单的说明)
      Select assesstime,username,SUM(
         Case when 分类='17个分公司打分' then 考核1*0.1
         when 分类='本中心主任打分' then 考核1*0.5
         when 分类='其它三个中心主任打分' then 考核1*0.1
         when 分类='本部门员工打分' then 考核1*0.2
         when 分类='其它中心员工打分' then 考核1*0.1
         END
      ),....... From  Sw_Month Group By assesstime,username语句不完整,请不要直接执行-----------------------------------------------------------------------------
    如果[Sw_Month]中记住了评分的角色,后续就可以按照这种方法统计了
     
      

  31.   

    select s.name,s.dept,
    isnull(m.plans1,0)*0.1+isnull(n.plans2,0)*0.5+isnull(l.plans3,0)*0.1+isnull(k.plans4,0)*0.2+isnull(p.plans5,0)*0.1 as plans,
    isnull(m.availability1,0)*0.1+isnull(n.availability2,0)*0.5+isnull(l.availability3,0)*0.1+isnull(k.availability4,0)*0.2+isnull(p.availability5,0)*0.1 as availability,
    isnull(m.exercisable1,0)*0.1+isnull(n.exercisable2,0)*0.5+isnull(l.exercisable3,0)*0.1+isnull(k.exercisable4,0)*0.2+isnull(p.exercisable5,0)*0.1 as exercisable,
    isnull(m.attitude1,0)*0.1+isnull(n.attitude2,0)*0.5+isnull(l.attitude3,0)*0.1+isnull(k.attitude4,0)*0.2+isnull(p.attitude5,0)*0.1 as attitude,
    isnull(m.quality1,0)*0.1+isnull(n.quality2,0)*0.5+isnull(l.quality3,0)*0.1+isnull(k.quality4,0)*0.2+isnull(p.quality5,0)*0.1 as quality,
    isnull(m.efficiency1,0)*0.1+isnull(n.efficiency2,0)*0.5+isnull(l.efficiency3,0)*0.1+isnull(k.efficiency4,0)*0.2+isnull(p.efficiency5,0)*0.1 as efficiency
    from sw_users s 
    left join 
    (select username,avg(plans) as plans1,avg(availability) as availability1,avg(exercisable) as exercisable1,avg(attitude) as attitude1,avg(quality) as quality1,avg(efficiency) as efficiency1 from sw_month
     where addguy in (select username from sw_users where job='地市用户') and assesstime=200705 group by username) m on m.username=s.username
    left join
    (select username,plans as plans2,availability as availability2,exercisable as exercisable2,attitude as attitude2,quality as quality2,efficiency as efficiency2 from sw_month where proportion=50 and assesstime=200705) n on n.username=s.username
    left join
    (select username,avg(plans) as plans3,avg(availability) as availability3,avg(exercisable) as exercisable3,avg(attitude) as attitude3,avg(quality) as quality3,avg(efficiency) as efficiency3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) and assesstime=200705 group by username) l on l.username=s.username
    left join
    (select username,avg(plans) as plans4,avg(availability) as availability4,avg(exercisable) as exercisable4,avg(attitude) as attitude4,avg(quality) as quality4,avg(efficiency) as efficiency4 from sw_month where addguy in (select username from sw_users where job='职员') and proportion=20 and assesstime=200705 group by username) k on k.username=s.username
    left join
    (select username,avg(plans) as plans5,avg(availability) as availability5,avg(exercisable) as exercisable5,avg(attitude) as attitude5,avg(quality) as quality5,avg(efficiency) as efficiency5 from sw_month where addguy in (select username from sw_users where job='职员') and proportion=10 and assesstime=200705 group by username) p on p.username=s.username
    where s.job='职员'
    order by s.pid desc以上就是完美版本了,楼主测试一下。
      

  32.   

    裸谢楼上的!还有一点点不对!哈哈!
    select s.name,s.dept,
    isnull(m.plans1,0)*0.1+isnull(n.plans2,0)*0.5+isnull(l.plans3,0)*0.1+isnull(k.plans4,0)*0.2+isnull(p.plans5,0)*0.1 as plans,
    isnull(m.availability1,0)*0.1+isnull(n.availability2,0)*0.5+isnull(l.availability3,0)*0.1+isnull(k.availability4,0)*0.2+isnull(p.availability5,0)*0.1 as availability,
    isnull(m.exercisable1,0)*0.1+isnull(n.exercisable2,0)*0.5+isnull(l.exercisable3,0)*0.1+isnull(k.exercisable4,0)*0.2+isnull(p.exercisable5,0)*0.1 as exercisable,
    isnull(m.attitude1,0)*0.1+isnull(n.attitude2,0)*0.5+isnull(l.attitude3,0)*0.1+isnull(k.attitude4,0)*0.2+isnull(p.attitude5,0)*0.1 as attitude,
    isnull(m.quality1,0)*0.1+isnull(n.quality2,0)*0.5+isnull(l.quality3,0)*0.1+isnull(k.quality4,0)*0.2+isnull(p.quality5,0)*0.1 as quality,
    isnull(m.efficiency1,0)*0.1+isnull(n.efficiency2,0)*0.5+isnull(l.efficiency3,0)*0.1+isnull(k.efficiency4,0)*0.2+isnull(p.efficiency5,0)*0.1 as efficiency
    from sw_users s 
    left join 
    (select username,avg(plans) as plans1,avg(availability) as availability1,avg(exercisable) as exercisable1,avg(attitude) as attitude1,avg(quality) as quality1,avg(efficiency) as efficiency1 from sw_month
     where addguy in (select username from sw_users where job='地市用户') and assesstime=200705 group by username) m on m.username=s.username
    left join
    (select username,plans as plans2,availability as availability2,exercisable as exercisable2,attitude as attitude2,quality as quality2,efficiency as efficiency2 from sw_month where proportion=50 and assesstime=200705) n on n.username=s.username
    left join
    (select username,avg(plans) as plans3,avg(availability) as availability3,avg(exercisable) as exercisable3,avg(attitude) as attitude3,avg(quality) as quality3,avg(efficiency) as efficiency3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) and proportion=10 and assesstime=200705 group by username) l on l.username=s.username
    left join
    (select username,avg(plans) as plans4,avg(availability) as availability4,avg(exercisable) as exercisable4,avg(attitude) as attitude4,avg(quality) as quality4,avg(efficiency) as efficiency4 from sw_month where addguy in (select username from sw_users where job='职员') and proportion=20 and assesstime=200705 group by username) k on k.username=s.username
    left join
    (select username,avg(plans) as plans5,avg(availability) as availability5,avg(exercisable) as exercisable5,avg(attitude) as attitude5,avg(quality) as quality5,avg(efficiency) as efficiency5 from sw_month where addguy in (select username from sw_users where job='职员') and proportion=10 and assesstime=200705 group by username) p on p.username=s.username
    where s.job='职员'
    order by s.pid desc
      

  33.   

    left join
    (select username,avg(plans) as plans3,avg(availability) as availability3,avg(exercisable) as exercisable3,avg(attitude) as attitude3,avg(quality) as quality3,avg(efficiency) as efficiency3 from sw_month where addguy in (select username from sw_users where right(job,2)='主任' ) and proportion=10 and assesstime=200705 group by username) l on l.username=s.username这里少了一个条件,我给出那个才是最终版!不过还是佩服!