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

时间:2013-07-22 14:23:23

标签: sql sql-server-2008

我正在使用SQL Server 2008 RD。

我有下表说myTable由许多列组成。 AccIDAccName是我感兴趣的列,而不是它们是主键。所以我想获得至少有重复的所有记录(AccIDAccName上可能有超过2行同意。)

  AccID     AccName
1 333       SomeName1
2 333       SomeName1
3 444       SomeName2
4 444       SomeName2
5 444       SomeName2

如何使用SQL执行此操作?

4 个答案:

答案 0 :(得分:3)

使用GROUP BY子句和COUNT聚合函数以及

指定的条件
HAVING COUNT(*) > 1

答案 1 :(得分:2)

尝试这种方式:

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

select t.*
from myTable t
inner join
(
  select AccID, AccName
  from myTable
  group by AccID, AccName
  having count(1) > 1
) agg on t.AccID = agg.AccID and t.AccName = agg.AccName