2016-11-06 14 views
1

複数のBSIDを持つレコードを返すテーブルがあります。SQL:2つ以上の一致を含むレコードを返す

例:

FirstName LastName CustomerID 
A   Apple  12345 
AB   Orange  12451 
AC   Durian  44123 
BODY  SHOP  11223 
BODY  SHOP  11224 
BODY  SHOP  11225 

質問:

どのように私は、この特定の個人は、3つの異なる顧客IDを持っているだけ下の3つを返すのですか?

私は

select Firstname, lastname, BSID, count(*) 
from table Profile 
group by firstname, lastname, BSID 
having count(*) > 1 

を書いて試してみましたが、結果はすべての6行を返します。

+0

あなたはこれまで何をしていますか? (あなた自身で) –

+0

BSIDとは何ですか? –

答えて

0

1つの方法として、すでに書いたサブクエリを使用して、保持したい姓と名のペアを識別し、これをメインテーブルに戻すことができます。 Amazonで赤方偏移で

SELECT t1.* 
FROM Profile t1 
INNER JOIN 
(
    SELECT FirstName, Lastname, BSID 
    FROM Profile 
    GROUP BY FirstName, Lastname, BSID 
    HAVING COUNT(*) > 1 
) t2 
    ON t1.Firstname = t2.Firstname AND 
     t1.Lastname = t2.Lastname AND 
     t1.BSID = t2.BSID 
0

あなたは句によってグループにもBISが含まれている場合、それはすべての値を返します。 とBISでグループ化されているため、重複するレコードはありません。以下は、受信されたResultSet、

FirstName LastName CustomerID Count 
A   Apple  12345  1  
AB   Orange  12451  1 
AC   Durian  44123  1 
BODY  SHOP  11223  1 
BODY  SHOP  11224  1 
BODY  SHOP  11225  1 

になりそして、あなたは数として句を持つ状態をチェックしている(*)> 1。だから、すべての行は、この条件を満たします。

しかし、あなたの必要な結果は以下のようになり、

FirstName LastName Count 
A   Apple  1  
AB   Orange  1 
AC   Durian  1 
BODY  SHOP  3 

したがって、あなたは以下のようにクエリを変更する必要が

select Firstname, lastname, count(*) 
from table Profile 
group by firstname, lastname 
having count(*) > 1 

ただ、 "を選択" と「グループからBISを削除by "節。

これはあなたの問題を解決するはずです。

関連する問題