私は次の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
そして、次のような出力が必要です(PersonIdとIsLead = 'Yes'に一致):
PersonId PersonName ProviderName
--------- ---------- ------------
P1 ABC Provider1
P2 PQR NULL
上記の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
私は別のものを使おうとしましたが、それでも役に立ちませんでした。
どんな助けでも大歓迎です!
ソリューションが正しく機能するためには、LEFT 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