select *
from
(select * from T where Action = 'SENT') s
left outer join
(select * from T where Action = 'RECEIVED') r
on r.Module and s.Module and r.User = s.User and r.Batch = s.Batch
Uit de beperkte hoeveelheid voorbeeldgegevens blijkt dat je een match uniek kunt bepalen door een gemeenschappelijke module
te hebben , user
en batch
. Ik weet niet zeker waarom je duplicaten in je zoekopdrachten hebt gevonden. Het enige andere probleem lijkt het gebruik van een outer join om de "sends" die nog geen "receive" hebben, te behouden.
Ik denk dat je nog steeds alles in het resultaat wilde hebben. Als je alleen de ongepaarde scenario's wilt, voeg dan toe:
where r.Module is null