col2
おそらく、あなたはその複製ごとに取得したいと思うでしょうcol1
。単一のクエリでそれを実際に行うことはできません^。代わりに、重複のリストを取得し、それを使用して他の関連する値を取得する必要があります。
select col1, col2
from table1
where col1 in (select col1
from table1
group by col1
having count (col1) > 1)
order by col2 desc
^わかりました。分析関数を使用して、@rsとして使用できます。実証された。このシナリオでは、ネストされたクエリの方が効率的だと思いますが、どちらも同じ結果になるはずです。
コメントによると、2番目の列を追加できない理由がはっきりしていないようです。次のようなサンプルデータがあるとします。
Col1 | Col2
-----+-----
1 | A
1 | B
2 | C
2 | D
3 | E
実行した場合
select Col1, count(*) as cnt
from table1
group by Col1
having count(*) > 1
その場合、結果は次のようになります。
Col1 | Cnt
-----+-----
1 | 2
2 | 2
Col2
データベースには実際に必要な値を知る方法がないため、このクエリを句に追加せずに追加することはできませgroup by
ん(つまり、Col1 = 1の場合、DBは「A」または「B」を返す必要がありますか?)。句にCol2を追加するとgroup by
、次のようになります。
select Col1, Col2, count(*) as cnt
from table1
group by Col1, Col2
having count(*) > 1
Col1 | Col2 | Cnt
-----+------+----
[no results]
Col1
これは、との組み合わせごとにカウントされるためですCol2
(それぞれが一意です)。
最後に、ネストされたクエリ(私の回答のように)または分析関数(@rs。の回答のように)のいずれかを使用すると、次の結果が得られます(クエリがわずかに変更されてカウントが返されます)。
select t1.col1, t1.col2, cnt
from table1 t1
join (select col1, count(*) as cnt
from table1
group by col1
having count (col1) > 1) t2
on table1.col1 = t2.col1
Col1 | Col2 | Cnt
-----+------+----
1 | A | 2
1 | B | 2
2 | C | 2
2 | D | 2