2016-07-05 72 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