Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Ghép nối các dòng dữ liệu gửi và nhận trong 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

Từ số lượng dữ liệu mẫu hạn chế, có vẻ như bạn có thể xác định duy nhất một kết quả phù hợp bằng cách có một module chung , userbatch . Tôi không chắc tại sao bạn lại đưa ra các bản sao trong các truy vấn của mình. Vấn đề duy nhất khác dường như là sử dụng kết nối bên ngoài để giữ các "gửi" chưa có "nhận".

Tôi nghĩ rằng bạn vẫn muốn mọi thứ trong kết quả. Nếu bạn chỉ muốn các tình huống chưa được ghép nối, hãy thêm:

where r.Module is null


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Deadlock là gì?

  2. Có thể chỉ định điều kiện trong Count () không?

  3. Đăng nhập thất bại. Thông tin đăng nhập từ một miền không đáng tin cậy và không thể được sử dụng với xác thực Windows

  4. Máy chủ hiệu suất cao - tôi nên sử dụng cái gì?

  5. Sắp xếp ngẫu nhiên máy chủ SQL