2016-07-05 75 views
1
SELECT 
    Staff.FullName, Skills.Name, Staff.Team, StaffSkills.Rating 
FROM 
    StaffSkills 
INNER JOIN 
    Staff ON Staff.Id = StaffSkills.StaffId 
INNER JOIN 
    Skills ON Skills.Id = StaffSkills.SkillId 
WHERE 
    Staff.Team LIKE '%financial services%' 
    AND (Skills.Name LIKE '%SDLC%' OR Skills.Name LIKE '%prince2%' OR 
     Skills.Name LIKE '%agile%' OR Skills.Name LIKE '%waterfall%' OR 
     Skills.Name LIKE '%oracle%' OR Skills.Name LIKE '%stakeholder%' OR 
     Skills.Name LIKE '%leadership%' OR Skills.Name LIKE '%negotiation%' OR 
     Skills.Name LIKE '%planning%') 

我的目標是過濾結果,以便顯示所有持有「%project management%」技能的金融服務人員 - 我還想要結果顯示進一步的技能(如果他們持有任何) - 任何在OR子句後面的技能,如果他們擁有一個在那裏的技能,它應該顯示在我的結果上。T-SQL - 如何篩選先決條件

很快插入預期結果,與我一起裸露。

+1

規則不清楚。只能通過項目管理技能返回金融服務團隊的用戶。以及那些擁有任何你所列出的其他技能並且擁有項目管理技能的用戶?顯示一個示例結果,這將有助於澄清您的需求。爲什麼有那麼多的「贊」聲明......不能是平等檢查嗎? – xQbert

+1

你的問題有點不清楚。如果您向我們展示一些示例數據以及您想要的輸出,可能會有所幫助。 –

+1

請顯示預期的輸出。有一個模擬創建表和插入數據腳本,以節省時間爲那些試圖幫助你的人也是有用的 – objectNotFound

回答

0

玩這個,看看它是否有幫助...我想出了,只是編輯記事本....需要更多的細節和您的架構和規則,以嘗試在真正的表。

SELECT Staff.FullName, Skills.Name, Staff.Team, StaffSkills.Rating, a.Name as AdditionalSkills 
FROM StaffSkills 
INNER JOIN Staff 
    ON Staff.Id = StaffSkills.StaffId 
INNER JOIN Skills 
    ON Skills.Id =StaffSkills.SkillId 
LEFT OUTER JOIN Skills a 
    ON a.Id = StaffSkills.SkillId 
WHERE Staff.Team LIKE '%financial services%' AND Skills.Name LIKE '%project management%' OR 
    (a.Name LIKE '%SDLC%' OR a.Name LIKE '%prince2%' OR 
    a.Name LIKE '%agile%' OR a.Name LIKE '%waterfall%' OR 
    a.Name LIKE '%oracle%' OR a.Name LIKE '%stakeholder%' OR 
    a.Name LIKE '%leadership%' OR a.Name LIKE '%negotiation%' OR 
    a.Name LIKE '%planning%') 
1

據我所知,你只想看到金融服務項目經理的工作人員,但你也希望看到他們的其他技能。您現在正在篩選僅查看具有金融服務和項目管理特定團隊/技能的記錄。如果你爲這些人拉ID,使用子查詢,你可以返回他們所有的技能。事情是這樣的:

SELECT Staff.FullName, Skills.Name, Staff.Team, StaffSkills.Rating 
FROM StaffSkills 
INNER JOIN Staff ON Staff.Id = StaffSkills.StaffId 
INNER JOIN Skills ON Skills.Id =StaffSkills.SkillId 
WHERE Staff.ID in (
     SELECT Staff.ID 
     FROM StaffSkills 
     INNER JOIN Staff ON Staff.Id = StaffSkills.StaffId 
     INNER JOIN Skills ON Skills.Id =StaffSkills.SkillId 
     WHERE Staff.Team LIKE '%financial services%' 
     AND Skills.Name LIKE '%project management%') 

編輯:你也應該考慮改變LIKE=在可能的情況。或者如果沒有別的,只使用一個通配符%=LIKE 'abc%'可以使用索引。雙通配符'%abc%'不會(全字符串查找)。

+0

謝謝 - 早上會試一試。 – OneUnited