SQL:在一组列上查找具有匹配值的记录
我正在使用SQLServer2008RD 下面的表是由许多列组成的myTable。AccID和AccName是我感兴趣的列,其中没有一个是主键。所以我想获得至少有一个副本的所有记录,其中可能有两行以上的AccID和AccName一致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 试着
如何使用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谢谢,我很高兴能帮助您: