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

Làm thế nào để sử dụng JOIN thay vì UNION để đếm các hàng xóm của A HOẶC B?

Câu trả lời của @ Martin là đúng. Anh ấy là một thiên tài.

Đi Martin!

CHỈNH SỬA

Câu trả lời của anh ấy hoạt động với 1 sửa đổi nhỏ nếu chạy ngược lại với giải pháp hai chiều mà tôi đã đưa ra. Nếu không, kết quả không chính xác.

Vì vậy, câu trả lời của bạn của anh ấy và của tôi :)

Giải pháp đầy đủ:

DECLARE @T1 TABLE (calling_party VARCHAR(50), called_party VARCHAR(50))

INSERT  INTO @T1
SELECT  *
FROM    dbo.monthly_connections_test

INSERT  INTO @T1
SELECT  *
FROM    (
        SELECT  called_party AS calling_party, calling_party AS called_party
        FROM    dbo.monthly_connections_test AS T2
        WHERE   T2.called_party < T2.calling_party
        ) T2
WHERE   NOT EXISTS (
        SELECT *
        FROM    monthly_connections_test
        WHERE   calling_party = T2.calling_party and called_party = T2.called_party
)

select u1, u2, count(called_party) called_parties 
from (
select distinct u1, u2, called_party from 
(
        select a1.calling_party u1, a2.calling_party u2 from 
        (select calling_party from @T1 group by calling_party) a1,
        (select calling_party from @T1 group by calling_party) a2
) pairs,
 @T1 AS T
where
(u1 <> u2) and 
((u1 = t.calling_party and u2 <> t.called_party) or
(u2 = t.calling_party and u1 <> t.called_party))
) res
group by u1, u2
order by u1, u2


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giải thích một số toán tử SQL Server

  2. Tại sao newid () hiện thực hóa ở cuối truy vấn?

  3. Bất kỳ giải pháp nào khác cho SQL Bộ phương tiện có 2 họ phương tiện nhưng chỉ có 1 được cung cấp. Tất cả các thành viên phải được cung cấp. lỗi?

  4. Vòng qua một tập bản ghi trong SQL Server

  5. Các tính năng hàng đầu cần tìm trong Công cụ giám sát máy chủ SQL