0

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

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”,其中第 2and3 列将包含更多重复项,但“column1”必须不同。所以目前上面的代码会返回:

Valueb       Value123     Value456 2

但我希望它回来

Valuea       Value123     Value456
Valueax      Value123     Value456 

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

4

2 回答 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;

这假定这些列都不是 NULLable。

于 2012-04-16T16:09:59.890 回答
0

如果我正确理解你的问题,

您希望为您的表提供唯一的行记录。除了使用Group ByAaron 提到的人之外,您不能在连接中使用。

但是,您可以使用它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 
于 2012-04-16T17:49:35.730 回答