感兴趣的值为EIN
和注册号REG
每个值都有很多记录。
我想知道的是哪一对值只相互出现(或空白EIN
)。
ID EIN REG
12 321 124
13 321 125
14 322 168
15 322 168
16 323 171
17 323 171
18 323
所以在上面的例子中,我想选择322和168,因为每次它们出现时,它们一起出现,但我也想选择323和171,因为它们永远不会出现另一个值,只是一个非-值。 100%的记录具有EIN,但较小的部分具有注册ID。
有关如何查询的任何建议吗?
答案 0 :(得分:5)
我使用此查询获得了您要查找的结果:
with cte as
(
select ein, count(distinct reg) as occ
from test b
group by ein
having count(distinct reg) = 1
)
select distinct t.ein, t.reg
from cte c
join test t
on c.ein = t.ein;
但是,我确信还有其他方法可以做到这一点。
答案 1 :(得分:3)
许多可能的方法之一:
SELECT DISTINCT ein, reg
FROM test t
WHERE reg is NOT NULL
AND NOT EXISTS (
SELECT 1 FROM test t1
WHERE t1.ein = t.ein AND t1.reg <> t.reg
OR t1.reg = t.reg AND t1.ein <> t.ein);
ein | reg
----+-----
323 | 171
322 | 168
EIN
为NOT NULL
,但REG
可以是NULL
,因为您写道:100%的记录具有EIN,但较小的部分具有注册ID。
NULL
从不符合运营商<>
的资格,因此不排除(323, 171)
。
我从结果中排除了包含reg IS NULL
的行,这似乎是您的意图。因此不包括
。(323, NULL)