我有一个简单的问题:如何在SQL中使用Count(Distinct)(确切地说是Oracle)只返回给定字段中有两个或更多不同值的行。
通过示例更容易理解:
ACCOUNT SALESMAN
123 Abc
123 Abc
246 Abc
246 Def
246 Def
369 Hij
456 Abc
456 Def
在此示例中,只有2个不同销售代表的帐户将是246和456,因此,我希望查询的结果只显示由2个或更多销售人员共享的帐户:
ACCOUNT SALESMAN
246 Abc
246 Def
456 Abc
456 Def
感谢。
答案 0 :(得分:7)
使用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
答案 1 :(得分: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
<强> SQL Fiddle 强>
答案 2 :(得分:1)
您可以使用简单的GROUP BY / HAVING查询执行此操作:
select account
from t
group by account
having count(distinct salesperson) > 1
这将返回帐户,因此结果与您指定的结果不同。吸引销售人员的一种方法是使用listagg:
select account, listagg(salesperson, ',')
from t
group by account
having count(distinct salesperson) > 1
否则,Gareth的回答会按照您在问题中指定的方式返回结果。