查找相同的两列值重复的行

时间:2012-12-10 18:55:38

标签: sql sql-server

在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的类似错误。

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

1 个答案:

答案 0 :(得分:8)

我写起来似乎更自然:

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