SQL:在一组列上查找具有匹配值的记录

SQL:在一组列上查找具有匹配值的记录,sql,sql-server-2008,Sql,Sql Server 2008,我正在使用SQLServer2008RD 下面的表是由许多列组成的myTable。AccID和AccName是我感兴趣的列,其中没有一个是主键。所以我想获得至少有一个副本的所有记录,其中可能有两行以上的AccID和AccName一致 如何使用SQL实现这一点?使用GROUP BY子句和COUNT AGGRATE函数,条件由指定 HAVING COUNT(*) > 1 使用GROUP BY子句和COUNT AGGRATE函数,条件由指定 HAVING COUNT(*) > 1 试着

我正在使用SQLServer2008RD

下面的表是由许多列组成的myTable。AccID和AccName是我感兴趣的列,其中没有一个是主键。所以我想获得至少有一个副本的所有记录,其中可能有两行以上的AccID和AccName一致


如何使用SQL实现这一点?

使用GROUP BY子句和COUNT AGGRATE函数,条件由指定

HAVING COUNT(*) > 1

使用GROUP BY子句和COUNT AGGRATE函数,条件由指定

HAVING COUNT(*) > 1
试着这样做:

select m1.AccID, m1.AccName 
from   myTable m1
join   ( select AccID,AccName 
         from myTable  
         group by AccID,AccName
         having count(1) = 2 
        ) m2 on   m1.AccID   = m2.AccID
             and  m1.AccName =  m2.AccName
试着这样做:

select m1.AccID, m1.AccName 
from   myTable m1
join   ( select AccID,AccName 
         from myTable  
         group by AccID,AccName
         having count(1) = 2 
        ) m2 on   m1.AccID   = m2.AccID
             and  m1.AccName =  m2.AccName

如果您想要所有记录,而不仅仅是重复值的名称,我建议使用count window函数:

select t.*
from (select t.*, count(*) over (partition by AccID, AccName) as cnt
      from mytable t
     ) t
where cnt > 1;

如果您想要所有记录,而不仅仅是重复值的名称,我建议使用count window函数:

select t.*
from (select t.*, count(*) over (partition by AccID, AccName) as cnt
      from mytable t
     ) t
where cnt > 1;

1+因为它很漂亮:太复杂了。一个简单的小组和拥有就可以了。1+因为它很漂亮:太复杂了。一个简单的分组和having就可以了。我用你的答案将count1=2替换为COUNT*>1,我向上投票@mhasanthanks@AntonBelev谢谢,我很高兴我能帮助你:我用你的答案将count1=2替换为COUNT*>1,并且我在@mhasan上投票thanks@AntonBelev谢谢,我很高兴能帮助您: