5

簡単な質問があります。SQL(正確にはOracle)でCount(Distinct)を使用して、特定のフィールドに2つ以上の異なる値がある行のみを返すにはどうすればよいですか。

これは例で簡単に理解できます。

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

ありがとう。

4

3 に答える 3

9

使用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

これがデモンストレーションです。

于 2012-09-21T16:12:53.237 に答える
6

他の答えがあなたが使う必要があることを示したよう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フィドル

于 2012-09-21T16:22:09.553 に答える
1

これは、単純なGROUP BY/HAVINGクエリで実行できます。

select account
from t
group by account
having count(distinct salesperson) > 1

これはアカウントを返すため、結果は指定したものとは異なります。営業担当者を獲得する1つの方法は、listaggを使用することです。

select account, listagg(salesperson, ',')
from t
group by account
having count(distinct salesperson) > 1

それ以外の場合、Garethの回答は、質問で指定した方法で結果を返します。

于 2012-09-21T16:30:43.200 に答える