2012-12-10 28 views
1

鉴于SQL-Server中的表:查找行,其中两个相同的列值岑参像

Id INTEGER 
A VARCHAR(50) 
B VARCHAR(50) 
-- Some other columns 

与A或B没有索引,我希望能够找到行,其中A和B的独特组合出现不止一次。

我使用的查询

SELECT A+B, Count(A+B) FROM MyTable 
GROUP BY A+B 
HAVING COUNT(A+B) > 1 

首先问

是否有更多的时间,有效的方式做到这一点? (我不能添加索引到数据库)

第二个问题

当我试图通过在级联进行的,为增益输出的一些格式:

SELECT A+','+B, Count(A+','+B) FROM MyTable 
GROUP BY A+','+B 
HAVING COUNT(A+','+B) > 1 

该查询将失败错误

Column 'MyDB.dbo.MyTable.A' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause 

与列B类似的错误。

如何格式化输出以分隔两列?

回答

5

这似乎更自然的我写的:

SELECT A, B, Count(*) FROM MyTable 
GROUP BY A, B 
HAVING COUNT(*) > 1 

而且它这样做的最有效的方法(因此是问题的查询)。

类似于上面的查询,你可以重写你的第二个查询:

SELECT A + ',' + B, Count(*) FROM MyTable 
GROUP BY A, B 
HAVING COUNT(*) > 1 
+0

这么简单,准确。 – himanshupareek66

相关问题