sql - 查找重复出现相同两列值的行

标签 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 列有类似的错误。

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

最佳答案

这样写对我来说似乎更自然:

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

关于sql - 查找重复出现相同两列值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13807314/

相关文章:

php - 多个表中的平均值的平均值

php - 如何选取最近的10条记录

mysql - 将准备好的语句与游标一起使用

asp.net - 数据库中的自动增量功能

sql - 使用liquibase修改SQL-Server中的数据类型和数据

mysql - 三元表达式验证 WHERE 子句 T-Sql 中的类型字段

sql - 在更新语句中使用当前行

mysql - 如何识别所有已完成任务的条目?

sql-server - 无法在 Access 2010 中查询 nVarChar(Max) 字段

sql - 使用 join 优化 sql 查询