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,不知道表结构是不是还算合理。
[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,不知道表结构是不是还算合理。
这个公司跟权重挂上钩了吗?
(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
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语句不完整,请不要直接执行
if(打分人是被打分人的主任)
权限=50
elseif(打分人是分公司的)
权限=10
elseif(打分人跟被打分人一个中心)
权限=20
else
权限=10
你的思路我觉得可以。
(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”.
语法没有错误,执行的时候出错。
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 稍加调整就
to:xiequanqin(新的一天,新的起点!) 挂上了,加入记录前有个判断,
if(打分人是被打分人的主任)
权限=50
elseif(打分人是分公司的)
权限=10
elseif(打分人跟被打分人一个中心)
权限=20
else
权限=10
-------------------------------------------------
权限=权重?
权重已经在proportion字段体现了,当然,直接求平均值就可以了!你的公式,已经体现在proportion字段里面了!
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语句不完整,请不要直接执
我设计表的时候是想直接计算的,但是有点疏忽的是权重有相同的并不能区分五种情况。
分几步来走:
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语句不完整,请不要直接执行
----------------------------------------------
这种写法了
[job] [varchar](20) NULL,--职位(主任,副主任,职员,分公司主任)
字段,
根据job生成权重proportion如果只是疏忽导致proportion不对,直接通过Sw_UsersUpdate其他的不变要么,增加权重对照表的临时表也可以。不然,每个字段都根据job生成CASE就比较麻烦了
以及 Sw_Month.id、 Sw_Month.dept、Sw_Month.addguy。。
应该可以算出正确的Sw_Month.proportion方法1:直接把Sw_Month.proportion Update成正确的值再统计
方法2:在统计语句中生成proportion ——不推荐如果Sw_Month.proportion 的取值规则没法定义好,那么,想通过其他方式统计正确的结果,也是不可能的!
主要问题在于按照什么分组因为有多个都是按10%计算,也就是权重一样,所以按照[proportion]分组是不行的,[proportion]字段就是冗余字段了职位(主任,副主任,职员,分公司主任),这里有三个“主任”,那“本中心主任”、“其它三个中心主任”的职位是“主任”还是包括了其他的两个?(这个有满意的解释的话可以用职务分组)关于用户表的字段
[lishu] [int] NULL CONSTRAINT [DF_Sw_Users_lishu] DEFAULT ((0)),--职员隶属于本中心主任
主任的[lishu]是自己还是什么?这个提问时区分“本中心主任”和“其它三个中心主任”的关键ps:
总体感觉,楼主的设计抛开了组织架构,直接用用户之间的关系来表示上下级关系是这个语句很难写的重要原因
主要问题在于按照什么分组因为有多个都是按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
这个思路是对的,但是执行的时候有错误,哪位高手能改正一下就好了!
你说的完全有可能,就是怕打分途中就发生人员变动,正发愁呢
完全可以改设计,能帮我重新设计一下表结构吗?所有的表都可以改。
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
张三 信息化中心 1.8
张三 信息化中心 2.6
李四 市场部本部 1.8
李四 市场部本部 2.6
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
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
一步一步来,上面这个可以调出一个部门的了!
不知道怎么嵌套循环输出,
就是先查询出部门名称,然后循环执行上面那个SQL语句,然后绑定数据。
哪位.net高手能给个提示?不胜感激!!!
楼上的没看懂不要瞎说,楼主就是每个角色打分都在这个表里放着的。
--------------------------------------------------------------------
不知道是不是真有一个明白的了~每个人的每个考核项目最终得分=(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%)可能考虑的不够周到,但是,弄清楚肯定是可以的
分几步来走:
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]中记住了评分的角色,后续就可以按照这种方法统计了
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以上就是完美版本了,楼主测试一下。
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
(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这里少了一个条件,我给出那个才是最终版!不过还是佩服!