2016-12-13 5 views
0

私は配管などの特定のスキルを持つデータベース内のすべての従業員を取得しようとしています。次のクエリを実行すると、私は必要なデータを取得していますが、その従業員は複数回表示されています。複数の行を1行に減らす

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

一部の表には1対多の関係があります。ユニークな行を得るために 'distinct'を使います。 –

+0

[各グループの最上位1行を取得する]の複製があります。(http://stackoverflow.com/questions/6841605/get-top-1rowrowof-each-group) –

+0

私の質問はどのように投票されますか? –

答えて

2

select distinctだけではなくselectを試してみてください。

また、結合構文を更新することをお勧めします。

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 
関連する問題