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
Ud fra den begrænsede mængde eksempeldata ser det ud til, at du entydigt kan bestemme et match ved at have et fælles module
, user
og batch
. Jeg er ikke sikker på, hvorfor du kom med dubletter i dine forespørgsler. Det eneste andet problem ser ud til at bruge en ydre sammenføjning til at beholde de "sends", der endnu ikke har en "modtag".
Jeg tror, du stadig ville have alt i resultatet. Hvis du kun ønskede de uparrede scenarier, så tilføj:
where r.Module is null