2013-07-21 91 views
0

我有一个计划,为评估人员带来“工作人员”头衔的技能评分,他们必须携带他们分配的文件编号。每个工人的一部分计数和技能评分百分比

SELECT distinct 
o.VP, 
o.AVP, 
o.Director, 
o.Supervisor, 
o.Worker, 
bs.File_NBR, 
s.Skill 
bs.score 
FROM [New_EEs].[dbo].[SBC_Best_Scores] bs 
inner join new_ees.dbo.SBC_Skills s 
on bs.Skill_NBR=s.SKILL_NBR 
inner join gw_PPP.dbo.Org_Hierarchy oon 
bs.File_NBR=o.File_NBR; 

我得到的数据集可能看起来像这样的:

VP AVP Director Supervisor Worker File_NBR Skill Rating 
Gerald Kris Doris NULL Mack 107812 B2 4 
Gerald Kris Doris NULL Mack 107812 D1 3 
Gerald Kris Doris NULL Mack 107812 D2 3 
Gerald Kris Doris NULL Mack 107812 D3 3 
Gerald Kris Doris NULL Mack 107812 E1 4 
Gerald Kris Mike NULL Brady 109080 A1 5 
Gerald Kris Mike NULL Brady 109080 B1 4 
Gerald Kris Mike NULL Brady 109080 B2 3 
Gerald Kris Mike NULL Brady 109080 B3 4 
Gerald Kris Mike NULL Brady 109080 C1 4 
Gerald Kris Mike NULL Brady 109080 C2 4 
Gerald Kris Mike NULL Brady 109080 C3 0 
Kim Harry NULL Grant Tom 108457 B1 4 
Kim Harry NULL Grant Tom 108457 B2 4 
Kim Harry NULL Grant Tom 108457 C1 4 
Kim Harry NULL Grant Tom 108457 C2: 5 
Kim Harry NULL Grant Tom 108457 C5 5 
Kim Harry NULL Grant Tom 108457 D1 4 
Kim Harry NULL Grant Tom 108457 D2 5 
Kim Harry NULL Grant Tom 108457 D3 4 
Kim Harry NULL Grant Jean 106934 C5 4 
Kim Harry NULL Grant Jean 106934 D1 5 
Kim Harry NULL Grant Jean 106934 D3 5 
Kim Harry NULL Grant Raphe 108901 B2 5 
Kim Harry NULL Grant Raphe 108901 C2 5 
Kim Harry NULL Grant Raphe 108901 C3 4 
Kim Harry NULL Grant Raphe 108901 C5 5 
Kim Harry NULL Grant Raphe 108901 D2 5 
Kim Harry NULL Grant Raphe 108901 E1 5 
Kim Harry NULL Grant Tyika 107923 B1 5 
Kim Harry NULL Grant Tyika 107923 B2 5 
Kim Harry NULL Grant Tyika 107923 D2 4 
Kim Harry NULL Grant Tyika 107923 D3 4 

该评级水平是1至5我需要做的是做的是创造一个表格显示每个sk给予工人的每个评分的数量和百分比由Vp,AVP,主管和主任分组。所以,最终在AVP下的所有作品以及最终在导演之下的所有工作者等等。

Name Role Skill Count of % of Count of  % of 
           Rating 1 Rating 1 Rating 2 Rating 2 
Gerald VP A1 100 29% 130 33% 
Gerald VP B1 95 28% 95 24% 
Gerald VP B2 120 35% 70 18% 
Gerald VP B3 30 9% 100 25% 
Kim VP A1    
Kim VP B1    
Kim VP B2  and so on  
Kim VP B3    
Kris AVP A1    
Kris AVP B1    
Kris AVP B2    
Kris AVP B3    
Harry AVP A1    
Harry AVP B1    
Harry AVP B2    
Harry AVP B3    
Doris Director A1    
Doris Director B1    
Doris Director B2    
Doris Director B3    
Mike Director A1    
Mike Director B1    
Mike Director B2    
Mike Director B3    
Grant Supervisor A1    
Grant Supervisor B1    
Grant Supervisor B2    
Grant Supervisor B3    

任何帮助将是伟大的!谢谢!

回答

1

由于您在不同的列中有不同的角色,为了获得紧凑的查询,您可能需要动态SQL或复杂数据透视表。因此,我选择了复制和粘贴,因为我认为复杂性不值得你拥有4个角色。

我已经为示例命名了查询T.

with roles as (
    select VP as Name, 'VP' as Role, Skill, Rating from t where VP is not null 
    union all 
    select AVP as Name, 'AVP' as Role, Skill, Rating from t where AVP is not null 
    union all 
    select Director as Name, 'Director' as Role, Skill, Rating from t where Director is not null 
    union all 
    select Supervisor as Name, 'Supervisor' as Role, Skill, Rating from t where Supervisor is not null 
), counts as (
    select Name, Role, Skill 
     ,count(case when rating = 1 then 1 else NULL end) as [Count of Rating 1] 
     ,count(case when rating = 2 then 1 else NULL end) as [Count of Rating 2] 
     ,count(case when rating = 3 then 1 else NULL end) as [Count of Rating 3] 
     ,count(case when rating = 4 then 1 else NULL end) as [Count of Rating 4] 
     ,count(case when rating = 5 then 1 else NULL end) as [Count of Rating 5] 
     ,count(*) as TotalCount 
    from roles 
    group by Name, Role, skill 
) 
select Name, Role, Skill 
,[Count of Rating 1] 
,CONVERT(varchar(10), convert(int,100.0 * [Count of Rating 1]/NULLIF(TotalCount, 0))) + '%' as [% of Rating 1] 
,[Count of Rating 2] 
,CONVERT(varchar(10), convert(int,100.0 * [Count of Rating 2]/NULLIF(TotalCount, 0))) + '%' as [% of Rating 2] 
,[Count of Rating 3] 
,CONVERT(varchar(10), convert(int,100.0 * [Count of Rating 3]/NULLIF(TotalCount, 0))) + '%' as [% of Rating 3] 
,[Count of Rating 4] 
,CONVERT(varchar(10), convert(int,100.0 * [Count of Rating 4]/NULLIF(TotalCount, 0))) + '%' as [% of Rating 4] 
,[Count of Rating 5] 
,CONVERT(varchar(10), convert(int,100.0 * [Count of Rating 5]/NULLIF(TotalCount, 0))) + '%' as [% of Rating 5] 
from counts 
order by Name, skill 

我在这里做的是将所有角色联合起来,硬编码角色名称。 roles重新整理表格,以便拥有VP的每个人都获得与该VP相关的一行,每个拥有AVP的人都可以获得该AVP的一行,...... counts然后为每个名称,角色和技能统计所有工作人员。最终选择计算百分比。

下面是一个小提琴演示:http://sqlfiddle.com/#!3/fe09d/15