sql >> Databáze >  >> RDS >> Sqlserver

Jak použít JOIN místo UNION k počítání sousedů A NEBO B?

@Martinova odpověď je správná. Je to génius.

Běž Martine!

OPRAVA

Jeho odpověď funguje s 1 malou úpravou, pokud běží proti obousměrnému řešení, které jsem dal. Jinak jsou výsledky nesprávné.

Takže vaše odpověď jeho a moje :)

Úplné řešení:

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. Odstranění duplicitních řádků z tabulky MySql

  2. ListAGG v SQLSERVER

  3. Jak odstraním pevný počet řádků s řazením v PostgreSQL?

  4. MysqlDump z Powershell a kódování Windows