使用count distinct来查找字段中具有2个或更多不同值的记录

Yaa*_*qov 5 sql oracle count aggregate-functions

我有一个简单的问题:如何在SQL中使用Count(Distinct)(确切地说是Oracle)只返回给定字段中有两个或更多不同值的行.

通过示例更容易理解:

ACCOUNT     SALESMAN
123         Abc
123         Abc

246         Abc
246         Def
246         Def

369         Hij

456         Abc
456         Def
Run Code Online (Sandbox Code Playgroud)

在此示例中,具有2个不同销售代表的唯一帐户将是246和456,因此,我希望查询的结果仅显示由2个或更多销售人员共享的帐户:

ACCOUNT     SALESMAN
246         Abc
246         Def
456         Abc
456         Def
Run Code Online (Sandbox Code Playgroud)

谢谢.

Gri*_*aub 8

用途having:

select distinct account,salesman 
from MyTable where account in
(
    select account
    from MyTable
    group by account
    having count(distinct salesman) >= 2
)
order by 1,2
Run Code Online (Sandbox Code Playgroud)

这是一个演示.


Gar*_*thD 5

正如另一个答案表明你需要使用HAVING,但不是在庄园指出.使用后需要连接回原始表HAVING

SELECT  DISTINCT T.Account, T.SalesMan
FROM    T
        INNER JOIN
        (   SELECT  Account
            FROM    T
            GROUP BY Account
            HAVING COUNT(DISTINCT SalesMan) > 1
        ) Dupes
            ON Dupes.Account = T.Account
Run Code Online (Sandbox Code Playgroud)

SQL小提琴