SQL查询:仅在查询中包含对行

时间:2019-05-29 13:59:58

标签: sql

我想在下表中查找成对的行

MS SQL 2012(也许是2014年)

Ref, Split
1, A
1, B
2, B
3, A
3, B

结果

Ref, Split
1, A
1, B
3, A
3, B

成对的行由'Ref'分隔,即1和3需要返回,但是2没有一对,因此不应返回

默认情况下,我会使用OVER,但是我认为这太过分了,不是处理此问题的最有效方法。

有哪些替代方案

2 个答案:

答案 0 :(得分:0)

为什么不使用自联接并将结果放在一行中?

select t1.ref, t1.split, t2.split
from t t1 join 
     t t2
     on t1.ref = t2.ref;

或者,如果您希望原始行使用exists

select t.*
from t
where exists (select 1 from t t2 where t2.ref = t.ref and t2.split <> t.split);

答案 1 :(得分:0)

如果您的DBMS支持count() over(),这就是方法。

select t.Ref, t.Split
from (
   select Ref, Split, count(distinct Split) over(partition by Ref) cnt
) t
where t.cnt > 1 
-- cnt = 2  if exactly the pairs are required