找到重复的SQL

时间:2012-04-16 16:01:31

标签: sql sql-server-2008

首先让我给出一些示例表格表,这将使我的问题更容易理解。

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 

我想返回'column1','column2','column3',其中第2列和第3列将包含多个重复项,但'column1'必须不同。所以目前上面的代码会返回:

Valueb       Value123     Value456 2

但我希望它返回

Valuea       Value123     Value456
Valueax      Value123     Value456 

其中column1具有不同的值,但column2和column3的值相同。

2 个答案:

答案 0 :(得分: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;

这假设这些列都不是NULLable。

答案 1 :(得分:0)

如果我理解你的问题,

您希望为表提供唯一的行记录。 而不是使用Aaron提到的Group By你不能用于连接。

但是,您可以使用Over来执行此操作。

更新:你需要考虑你需要分组的内容,因为Aaron提到“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