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)
我尝试使用不同但即使没有帮助.
任何帮助将非常感激!
为了使您的解决方案正常工作,您需要使用 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)