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
Aus der begrenzten Menge an Beispieldaten geht hervor, dass Sie eine Übereinstimmung eindeutig bestimmen können, indem Sie ein gemeinsames module
haben , user
und batch
. Ich bin mir nicht sicher, warum Sie in Ihren Abfragen Duplikate gefunden haben. Das einzige andere Problem scheint die Verwendung eines äußeren Joins zu sein, um die "Sends" zu behalten, die noch kein "Receive" haben.
Ich denke, Sie wollten immer noch alles im Ergebnis. Wenn Sie nur die ungepaarten Szenarien möchten, fügen Sie hinzu:
where r.Module is null