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
D'après la quantité limitée d'échantillons de données, il semble que vous pouvez déterminer une correspondance de manière unique en ayant un module
commun , user
et batch
. Je ne sais pas pourquoi vous avez trouvé des doublons dans vos requêtes. Le seul autre problème semble être l'utilisation d'une jointure externe pour conserver les "envois" qui n'ont pas encore de "réception".
Je pense que tu voulais toujours tout dans le résultat. Si vous ne vouliez que les scénarios non appariés, ajoutez :
where r.Module is null