【问题标题】:How to filter for a prerequiste如何筛选先决条件
【发布时间】:2016-11-07 12:41:55
【问题描述】:
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 子句之后,如果他们拥有在那里命名的技能,它应该显示在我的结果中。

即将插入预期结果,请耐心等待。

【问题讨论】:

  • 规则不明确。只返回金融服务团队中具有项目管理技能的用户。那些具有您列出的其他技能的用户,无论团队如何,并且具有项目管理技能?显示一个示例结果,这将有助于阐明您的需求。以及为什么有这么多“Like”语句......不能是平等检查吗?
  • 你的问题有点不清楚。如果您向我们展示一些示例数据以及您想要的输出,也许会有所帮助。
  • 请显示预期输出。有一个模拟创建表和插入数据脚本也很有用,可以为那些试图帮助你的人节省时间
  • 也就是说,如果我正确理解您的要求,您的查询可能需要与技能表进行自我(外部)联接才能获得额外的技能。

标签: sql sql-server tsql filter


【解决方案1】:

据我了解,您只想查看作为金融服务项目经理的员工,但您还希望查看他们的其他技能。现在,您正在过滤以仅查看具有金融服务和项目管理的特定团队/技能的记录。如果您改为为这些人拉IDs,使用子查询,您可以返回他们的所有技能。像这样的:

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%' 不会(全字符串搜索)。

【讨论】:

  • 谢谢 - 早上会试一试。
【解决方案2】:

玩这个,看看它是否有帮助...我想出了在记事本上进行编辑的方法...。需要更多详细信息以及您的架构和规则才能在真实表格上尝试。

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%')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2016-05-10
    相关资源
    最近更新 更多