2013-07-21 119 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