2016-12-13 6 views
0

Ich versuche, alle Mitarbeiter in meiner Datenbank, die eine bestimmte Fähigkeit, wie z. B. Sanitär haben. Wenn ich die folgende Abfrage mache, bekomme ich die Daten, die ich will, aber es zeigt diesen Angestellten mehr als einmal an.Reduzieren mehrerer Zeilen in einzelne Zeilen

SELECT 
     TE.intEmployeeID 
    ,TE.strLastName + ', ' + TE.strFirstName AS strEmployeeName 
    ,CONVERT (VARCHAR, TE.dteHireDate, 101) AS dteHireDate 
    ,TES.intSkillID 
    ,TS.strSkills 

FROM 
    TEmployees   AS TE 
    ,TEmployeeSkills AS TES 
    ,TSkills   AS TS 
    ,TJobEmployees  AS TJE 
WHERE 

     TE.intEmployeeID = TJE.intEmployeeID 
    AND TS.intSkillID  = TES.intSkillID 
    AND TES.intEmployeeID = TE.intEmployeeID 
    AND TES.intEmployeeID = TJE.intEmployeeID 
    AND TES.intSkillID = 6 

/* 
What I am getting: 

intEmployeeID strEmployeeName dteHireDate intSkillID strSkills 
    2   Quagmire, Glen  06/10/2012  6   Plumbing 
    4   Cage, Luke   01/10/2012  6   Plumbing 
    4   Cage, Luke   01/10/2012  6   Plumbing 
    2   Quagmire, Glen  06/10/2012  6   Plumbing 
    2   Quagmire, Glen  06/10/2012  6   Plumbing 
    4   Cage, Luke   01/10/2012  6   Plumbing 

    What I need: 

intEmployeeID strEmployeeName dteHireDate intSkillID strSkills 
    2   Quagmire, Glen  06/10/2012  6   Plumbing 
    4   Cage, Luke   01/10/2012  6   Plumbing 
*/ 
+3

einige der Tabellen können eine Eins-Viele-Beziehung haben. Verwenden Sie "distinct", um eindeutige Zeilen zu erhalten. –

+0

Mögliches Duplikat von [Get top 1 row jeder Gruppe] (http://stackoverflow.com/questions/6841605/get-top-1-row-of-each-group) –

+0

Wie wird meine Frage abgelehnt? –

Antwort

2

versuchen select distinct statt nur select.

Ich würde auch empfehlen, Ihre Join-Syntax zu aktualisieren.

select distinct 
     te.intEmployeeid 
    ,te.strLastName + ', ' + te.strFirstName as strEmployeeName 
    ,convert (varchar, te.dteHireDate, 101) as dteHireDate 
    ,tes.intSkillid 
    ,ts.strSkills 
from temployees as te 
    inner join temployeeSkills as tes on tes.intEmployeeid = te.intEmployeeid 
    and tes.intSkillid = 6 
    inner join tskills as ts   on ts.intSkillid  = tes.intSkillid 
    inner join tjobEmployees as tje on tje.intEmployeeid = te.intEmployeeid