Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Koppeln von Sende- und Empfangsdatenzeilen in SQL

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