SQL Server:不重复时返回结果

时间:2019-05-31 22:53:15

标签: sql sql-server logic

我似乎无法解决这个问题。为了尽可能简化,假设我有一张桌子:

Id      cid         Account
1       4010        Bank Co
2       5323        Webazon
3       3513        Internal
4       3513        PhoneCo
5       5597        Internal

我想返回所有结果,但Account ='Internal'的行除外,那里也有一个客户具有相同的cid。因此,在这种情况下,我们将返回第1,2,4和5行,因为'PhoneCo'和'Internal'共享cid 3513将不会返回第3行。但是,由于没有其他记录,因此将返回第5行。共享cid 5597。

我正在使用UNION进行开发,其中第一部分是消除所有“内部”记录,第二部分只是我感兴趣的那些,但是我可能会去做错误的方式。

1 个答案:

答案 0 :(得分:0)

这是一种方法:

select t.*
from t
where t.account <> 'Internal' or
      not exists (select 1
                  from t t2
                  where t2.cid = t.cid and t2.account <> 'Internal'
                 );

也就是说,选择所有所有非内部记录。并且,为没有对应的非内部帐户的内部帐户选择记录。