Sql server 2012 SQL中的内部联接返回重复的行
我有以下三个表格:Sql server 2012 SQL中的内部联接返回重复的行,sql-server-2012,inner-join,duplicate-removal,Sql Server 2012,Inner Join,Duplicate Removal,我有以下三个表格: Person TeamMember Provider PersonId PersonName PersonId ProviderId IsLead ProviderId ProviderName --------- ---------- -------- ------------ -------- ------------ -
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
我需要输出为(匹配PersonId和IsLead='Yes'):
我在上面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
我试着使用DISTINCE,但即使这样也没用
任何帮助都将不胜感激 要使解决方案正常工作,需要使用
左JOIN
并将大小写表达式移动到JOIN子句中。我相信以下查询将满足您的需要。您可以在上查看一个示例
你在做一个“树”连接。一个根表使用不同的条件连接到两个单独的根表。你得到了预期的行为。如果联接表A有4条匹配的记录,联接表B有8条,那么将得到8行记录,其中4行的A记录为空。e、 你总是能得到尽可能多的记录来处理max(matched)表中的所有匹配记录。它成功了!谢谢
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
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