SQL - 组值列A,仅在列B中显示具有不同的值

时间:2016-09-07 11:26:19

标签: sql tsql

我正在尝试编写一个查询,以便在使用相同的电子邮件地址或电话号码时注意,但邮政编码不同。

我有一张如下表:

Ref@   | PCode   | Email
----------------------------------
LYJX01 | B99 1AA | this@that.com
LYJX02 | B98 1AA | this@that.com
LYJX03 | B92 1DD | this@that.com
AHSF01 | B91 2BB | my@email.com

我想提取th​​is@that.com的所有记录,因为他们有多个与其电子邮件地址相关的不同邮政编码。

在一个理想的世界中,邮政编码对于电子邮件地址应该是唯一的,但如果邮政编码有所不同,我希望提取这些政策。

我到目前为止写了这个:

SELECT pr.B@, pr.Ref@, 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
)

所有这一切都是在拉着所有记录,在这些记录中,他们有多行具有相同的邮政编码,并且电子邮件地址不止一次存在。

如何才能显示他们有邮政编码实例更改的位置?

干杯。

2 个答案:

答案 0 :(得分:1)

您希望最初查找记录了多个邮政编码的所有电子邮件,然后从主表中返回记录电子邮件的所有记录:

asdfnjaslfjsa
asdfjaskldfsafkldj
asdfjsadfk
STRING_1
sanjvnlamf
 fas g
gsegvrs 
STRING_2
STRING_1
asmorancm
anib fas
STRING_2
sdabfashbdfbc  ds

使用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. ) 帮助查询性能,因为查询将在找到匹配后立即停止处理子选择。

答案 1 :(得分: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
                )

希望有所帮助