Sql 识别具有重复和唯一值的记录

Sql 识别具有重复和唯一值的记录,sql,sql-server-2008,foreign-keys,duplicates,Sql,Sql Server 2008,Foreign Keys,Duplicates,我在外键不同的记录上寻找重复地址。这给了我两个副本: select quoteID, insuredID, Address1, PolicyID from quote where address1 in(select address1 from quote group by address1 having count(address1) > 1) and datalength(address1) <> 0 order by address1 我想筛选出所有保险ID相同的记录

我在外键不同的记录上寻找重复地址。这给了我两个副本:

select quoteID, insuredID, Address1, PolicyID
from quote
where 
address1 in(select address1 from quote group by address1 having count(address1) > 1)
and datalength(address1) <> 0
order by address1

我想筛选出所有保险ID相同的记录。我真的需要在结果中保留quoteID,以便调查问题帐户。我正在使用SQL Server 2008。

使用窗口函数。如果我理解你想要的逻辑:

select q.*
from (select q.*,
             min(insuredId) over (partition by address1) as minii,
             max(insuredId) over (partition by address1) as maxii
      from quote
      where datalength(address1) <> 0
     ) q
where minii <> maxii;
如果我列错了,那么类似的东西可能就是你想要的

select quoteID, insuredID, Address1, PolicyID
from quote
    inner join (select Address1, insuredID
    from quote
        inner join (select address1 from quote where address1 IS NOT NULL group by address1 having count(address1) > 1) T1 on quote.address1 = T1.address1
    group by insuredID, Address1
    having count(address1) = 1) T2  on quote.address1 = T2.address1 and quote.insuredID = T2.insuredID
order by address1

我认为您有充分的理由使用datalength而不仅仅是len。

如果我正确理解您的意思,您只想找到那些地址相同但保险ID不同的记录

下面的查询应该可以做到这一点,首先它会像您一样抓取所有重复的地址记录,然后通过加入它来只提取具有这些地址的记录。然后按地址和insuredId分组,只获取记录计数为1的记录,大于1表示它们共享相同的insuredId和地址,这不是您想要的

select quoteID, insuredID, Address1, PolicyID
from quote
    inner join (select Address1, insuredID
    from quote
        inner join (select address1 from quote where address1 IS NOT NULL group by address1 having count(address1) > 1) T1 on quote.address1 = T1.address1
    group by insuredID, Address1
    having count(address1) = 1) T2  on quote.address1 = T2.address1 and quote.insuredID = T2.insuredID
order by address1

可能重复的我是新的SQL,发现如何消除这个网站上的空白。我刚刚用len交换了datalength,这也行得通——我必须了解差异。我尝试了你建议的一个稍微修改的版本,它使我更接近。。。谢谢-如果我得到了我想要的,我会继续完善amd标志。