2016-07-05 9 views
1

Mein Ziel ist es, die Ergebnisse zu filtern, so dass es alle Personen unter Finanzdienstleistungen zeigt, die die Fähigkeit "% Projektmanagement%" besitzen - ich würde auch gerne die Ergebnisse sehen um weitere Fähigkeiten zu zeigen (wenn sie welche haben) - also alles nach der OR-Klausel, wenn sie eine dort genannte Fähigkeit besitzen, sollte sie auf meinen Ergebnissen zeigen.T-SQL - Wie man nach einer Vorbedingung filtert

Einfügen der erwarteten Ergebnisse in Kürze, bare mit mir.

+1

Die Regeln sind unklar. Geben Sie nur die Benutzer des Finanzdienstleistungsteams mit der Fähigkeit des Projektmanagements zurück. UND diese Benutzer mit irgendwelchen Ihrer aufgelisteten anderen Fähigkeiten unabhängig vom Team und mit Projektmanagementfähigkeiten? Zeigen Sie ein Beispielergebnis, das Ihren Bedarf verdeutlichen würde. und warum so viele "LIke" -Aussagen ... kann es nicht eine Gleichheitsprüfung sein? – xQbert

+1

Ihre Frage ist ein wenig unklar. Vielleicht würde es helfen, wenn Sie uns einige Beispieldaten zusammen mit der gewünschten Ausgabe zeigen. –

+1

Bitte zeigen Sie die erwartete Ausgabe an. Es wird auch nützlich sein, eine Scheintabelle zu erstellen und Datenskript einzufügen, um Zeit für diejenigen zu sparen, die versuchen, Ihnen zu helfen – objectNotFound

Antwort

0

spielen mit diesem und sehen, ob es hilft ... Ich kam mit dem nur Bearbeitung auf Notizblock .... brauchen mehr Details und Ihr Schema und Regeln, um es auf einem echten Tisch zu versuchen.

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

Wie ich es verstehe, dass Sie nur wollen Mitarbeiter, die sind Finanzdienstleistungen Projektmanager sehen, aber Sie wollen auch ihre anderen Fähigkeiten zu sehen. Sie filtern gerade, um nur Aufzeichnungen mit dem spezifischen Team/der Fähigkeit der Finanzdienstleistungen und des Projektmanagements zu sehen. Wenn Sie stattdessen ID s für diese Personen verwenden und eine Unterabfrage verwenden, können Sie alle ihre Fähigkeiten zurückgeben. Etwas wie folgt aus:

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

Edit: Auch sollten Sie überlegen, LIKE-= wo möglich zu verändern. Oder verwenden Sie nur einen Platzhalter %. = und LIKE 'abc%' können Indizes verwenden. Doppel-Wildcards '%abc%' wird nicht (vollständige Zeichenfolge sucht).

+0

Vielen Dank - versuchen Sie es am Morgen. – OneUnited

Verwandte Themen