Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Accoppiamento di righe di dati di invio e ricezione 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

Dalla quantità limitata di dati campione sembra che tu possa determinare in modo univoco una corrispondenza disponendo di un module comune , user e batch . Non sono sicuro del motivo per cui hai trovato duplicati nelle tue domande. L'unico altro problema sembra essere l'utilizzo di un outer join per mantenere gli "invii" che non hanno ancora una "ricezione".

Penso che tu volessi ancora tutto nel risultato. Se volevi solo gli scenari non accoppiati, aggiungi:

where r.Module is null