我正在使用SQL Server 2008 RD。
我有下表说myTable
由许多列组成。 AccID
和AccName
是我感兴趣的列,而不是它们是主键。所以我想获得至少有重复的所有记录(AccID
和AccName
上可能有超过2行同意。)
AccID AccName
1 333 SomeName1
2 333 SomeName1
3 444 SomeName2
4 444 SomeName2
5 444 SomeName2
如何使用SQL执行此操作?
答案 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