1

我正在使用 SQL Server 2008 RD。

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

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

我怎样才能用 SQL 做到这一点?

4

4 回答 4

3

使用 GROUP BY 子句和 COUNT 聚合函数并指定条件

HAVING COUNT(*) > 1
于 2013-07-22T14:26:03.813 回答
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
于 2013-07-22T14:27:06.640 回答
2

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

select t.*
from (select t.*, count(*) over (partition by AccID, AccName) as cnt
      from mytable t
     ) t
where cnt > 1;
于 2013-07-22T14:33:41.707 回答
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
于 2013-07-22T14:27:19.837 回答