1

感兴趣的值是一个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。

关于如何查询这个的任何建议?

4

2 回答 2

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;

sqlfiddle

但是,我确信还有其他方法可以做到这一点。

于 2013-04-25T16:47:54.030 回答
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

-> SQLfiddle。

  • 我假设EINNOT NULL,但REG可以是NULL,因为您写道:

100% 的记录有一个 EIN,但一小部分有一个注册 ID。

  • NULL从不符合 operator <>,因此(323, 171)不被排除在外。

  • 我从结果中排除了带有 reg 的行IS NULL,这似乎是你的意图。所以 (323, NULL)不包括在内。

于 2013-04-26T18:29:20.027 回答