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
Z ograniczonej ilości przykładowych danych wynika, że możesz jednoznacznie określić dopasowanie, mając wspólny module
, user
i batch
. Nie wiem, dlaczego w swoich zapytaniach pojawiły się duplikaty. Jedynym innym problemem wydaje się być użycie zewnętrznego sprzężenia, aby zachować „wysyłki”, które nie mają jeszcze „odbioru”.
Myślę, że nadal chciałeś mieć wszystko w wyniku. Jeśli chcesz tylko niesparowanych scenariuszy, dodaj:
where r.Module is null