SQL中的内部联接返回重复的行

Mal*_*esh 5 inner-join duplicate-removal sql-server-2012

我有以下3个表:

       Person                        TeamMember                     Provider

 PersonId   PersonName   PersonId   ProviderId    IsLead     ProviderId   ProviderName
---------   ----------   --------  ------------  --------   ------------  --------
  P1         ABC            P1         PR1          Yes          PR1       Provider1
  P2         PQR            P1         PR2          No           PR2       Provider2
                            P1         PR3          No           PR3       Provider3
                          -------------------------------
                            P2         PR1          No
                            P2         PR2          No
                            P2         PR3          No
Run Code Online (Sandbox Code Playgroud)

我需要输出为(匹配PersonId和IsLead ='是'):

PersonId  PersonName ProviderName
--------- ---------- ------------
  P1       ABC         Provider1
  P2       PQR         NULL
Run Code Online (Sandbox Code Playgroud)

我在上面的3个表中使用下面的内部连接但是我在结果中获得了重复的行.

  SELECT        P.PersonID, P.PersonName, 
         CASE WHEN TM.IsLead = 'Yes' THEN Pr.ProviderName
              WHEN TM.IsLead = 'No'  THEN NULL END AS ProviderName

  FROM            Person P INNER JOIN TeamMember TM ON P.PersonID = TM.PersonID 
                           INNER JOIN Provider PR ON Pr.ProviderId = TM.ProviderId
Run Code Online (Sandbox Code Playgroud)

我尝试使用不同但即使没有帮助.

任何帮助将非常感激!

Nic*_*yvV 5

为了使您的解决方案正常工作,您需要使用 aLEFT JOIN并将 CASE 表达式移至 JOIN 子句。我相信以下查询将满足您的需求。您可以查看SQLFIDDLE

上的示例。

SELECT
 P.PersonID
 ,P.PersonName
 ,Pr.ProviderName
FROM Person P
 LEFT JOIN TeamMember TM ON TM.PersonID = P.PersonID
                         AND TM.IsLead = 'Yes'
 LEFT JOIN Provider PR ON Pr.ProviderId = TM.ProviderId
Run Code Online (Sandbox Code Playgroud)