2016-09-07 7 views
0

同じ電子メールアドレスまたは電話番号が使用されているが郵便番号が異なる場合に注意を払うためのクエリを作成しようとしています。SQL - グループ値列A、列Bにのみ表示される値が異なる

私は以下のようなテーブルを持っている:

[email protected] | PCode | Email 
---------------------------------- 
LYJX01 | B99 1AA | [email protected] 
LYJX02 | B98 1AA | [email protected] 
LYJX03 | B92 1DD | [email protected] 
AHSF01 | B91 2BB | [email protected] 

私は、彼らが自分のメールアドレスに関連付けられた複数の異なる郵便番号を持っているので、[email protected]のすべてのレコードを引き出したいです。

理想的な世界では、郵便番号は電子メールアドレスに固有のものでなければなりませんが、郵便番号が異なる場合、私はこれらのポリシーを引き出したいと思います。

私はこれまでのところ、これを書いた:

SELECT [email protected], [email protected], pr.Pcode, pr.Email 
FROM dbo.ic_Daprospect pr 
WHERE pr.Email IN (
SELECT Email 
FROM dbo.ic_Daprospect pr 
GROUP BY pr.Email 
HAVING COUNT(*) > 1 
) 

すべてこれはしかしやっている彼らは、同じ郵便番号を持つ複数の行があり、電子メールアドレスが複数回存在するすべてのレコードを引っ張っています。

郵便番号のインスタンスがどこに変更されているかを表示するにはどうすればよいですか?

乾杯。

答えて

1

あなたが最初にそれらに対して記録し、複数の郵便番号を持っているすべての電子メールを見つけ、その後、記録された電子メールは、このリストに含まれているメインテーブルからすべてのレコードを返したい:existsヘルプを使用して

select * 
from dbo.ic_Daprospect pr 
where exists(
      select null 
      from dbo.ic_Daprospect pr2 
      where pr.Email = pr2.Email -- This matches any records with the same email as the one in your source table. 
      group by pr2.Email   -- Group them to get one row per email. 
      having count(distinct pr2.PCode) > 1 -- Then filter for where there is more than one PCode for that email. 
      ) 

一致が見つかると直ちにサブ選択の処理を中止するクエリのパフォーマンスが向上します。

+0

を助けOPまたは将来の視聴者が自分の問題やソリューションを理解するために何もしません願っています。 – leigero

+0

@leigero回答が更新されました。 – iamdave

1

メールIDとコードの組み合わせが同じレコードも除外してください。

select * 
    from dbo.ic_Daprospect pr 
    where exists(
       select 1 
       from dbo.ic_Daprospect pr2 
       where pr.Email=pr2.Email and pr.Email||pr.PCode <> pr2.Email||pr2.PCode 
       ) 

はそれだけで説明なしでコードのブロブを投稿

関連する問題