首先让我给出一些示例表格表,这将使我的问题更容易理解。
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的值相同。
答案 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