2013-07-22 120 views
1

我正在使用SQL Server 2008 RD。SQL:在一組列上查找具有匹配值的記錄

我有下面的表格說myTable由很多列組成。 AccIDAccName是我感興趣的列,而非它們是主鍵。所以我想獲得所有的記錄至少有一個重複(可能有超過2行同意AccIDAccName)。

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

我該怎麼用SQL做這件事?

回答

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 
+1

非常不錯的把戲... –

+0

我已經把upvoted了:) –

+0

我用你的回答替代'有(1)= 2'有'有計數(*)> 1',我向上投票@ mhasan謝謝 –

3

使用GROUP BY子句和COUNT通過

HAVING COUNT(*) > 1 
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 
2

如果你想把所有的記錄(的不只是名字重複值),我會建議使用count()窗口函數:

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

學到了新的東西......謝謝 –

+0

1+,因爲它很美:) –

+2

太複雜了。一個簡單的小組,並且會做。 –

相關問題