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'を返したいのですが、列2と3には複数の重複が含まれますが、'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;

これは、これらの列のいずれもNULL可能ではないことを前提としています。

于 2012-04-16T16:09:59.890 に答える
0

私があなたの質問を正しく理解していれば、

テーブルに一意の行レコードが必要です。アーロンが言及した人を使用する代わりにGroup By、連結には使用できません。

ただし、これを行うために使用できますOver

更新:アーロンが「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 に答える