查找重复数据SQL
让我先给一些示例表格,这将使我的问题更容易理解。查找重复数据SQL
Column1 Column2 Column3
Valuea Value123 Value456
Valueax Value123 Value456
Valueb Value123 Value456
Valueb Value123 Value456
select Column1,
Column2,
Column3,
count(*)
from ColumnName
group by
Column1,
Column2,
Column3,
having count(Count2+Count3) > 1
我想回到“列1”,“列2”,“栏3”,其中列2and3将包含超过重复以上,但“列1”必须是不同的。所以,目前上面的代码将返回:
Valueb Value123 Value456 2
,但我想它返回
Valuea Value123 Value456
Valueax Value123 Value456
其中COLUMN1都有不同的价值观,但列2和栏3的值是相同的。
您无法通过连接进行分组。这会将'xxx'+'yyy'视为'x'+'xxyyy'。如何获得
;WITH x AS
(
SELECT Column2, Column3
FROM dbo.table GROUP BY Column2, Column3
HAVING COUNT(*) > 1
)
SELECT t.Column1, t.Column2, t.Column3
FROM x INNER JOIN dbo.table AS t
ON x.Column2 = t.Column2
AND x.Column3 = t.Column3
GROUP BY t.Column1, t.Column2, t.Column3
HAVING COUNT(*) = 1;
这假定这些列都不可空。
如果我理解你的问题正确,
你想为你的表具有唯一的行记录。 而不是使用亚伦提到的Group By
不能用于连接。
但是,您可以使用Over
来做到这一点。
UPDATE:你需要考虑什么是你需要组合在一起亚伦提到“X” +“YY”是“XY” +“Y”
With Data AS
(
SELECT ROW_NUMBER() Over
(Partition By "Key" Order by "Key") as R,
Column1, Column2, Column3
)
SELECT * FROM Data
WHERE R = 1
'分区按列1 +列2 +列3'?这很危险。 ''x'+'yy'+'z'将被视为与''xy'+'y'+'z''相同,但我不认为这些行是相同的。在任何情况下,即使你忽略了,我不认为这给出了预期的结果 - 为什么'WHERE R = 1'? – 2012-04-16 18:01:05
在阅读您的文章后,我没有注意到。我会编辑答案。 – Turbot 2012-04-16 18:32:44
仍然没有看到这可能如何推导出所需的结果。 – 2012-04-16 21:57:32
注意,如果你有相同的三行,有些是重复的(例如'Valuea','Valueax'和'Valueax'),后两者不会被报告......如果这些是潜在的情况,您需要提供更多的样本数据以及您希望如何处理这些案件。 – 2012-04-16 18:15:22