在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的类似错误。
如何格式化输出以分隔两列?
答案 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