2016-05-13 24 views
0

すべての関連する質問をチェックしましたが、必要なものを正確に見つけることができませんでした。SQLグループ化せずに重複値を選択

レコードごとに特定のフィールドが同じであるデータを返す必要がありますが、コピーしたすべてのレコードを表示する必要があるため、group byを使用することはできません。

私はgroup byhaving count(field) > 1と様々な簡単なselectのフォームや運でcount()を使用しようとする他の方法を使用してみました。

基本的には、特定のフィールドに固有の値がある場所以外のテーブルのすべてを参照する必要があります。ユニークでない場合、私はそれを見る必要があります。

追加の要件がありますが、ここでは簡単にするためにここには含めません。私はSSMS 2008 R2を使用しています。

おかげ

例:

データ:

Col1 | Col2 | Col3 
---------------------- 
abc  wow  13/05/2016 
abc  wow  10/05/2016 
def  wow  13/05/2016 
ghi  wow  13/05/2016 
ghi  wow  10/05/2016 
jkl  wow  01/01/2016 

期待される結果:

Col1 | Col2 | Col3 
---------------------- 
abc  wow  13/05/2016 
abc  wow  10/05/2016 
ghi  wow  13/05/2016 
ghi  wow  10/05/2016 

私は一意の値を持っていないものを表示するために探していますCol1

+0

予期した結果を得たサンプルデータでは、問題をよりよく理解するのに役立ちます。 –

+0

@GiorgosBetsos私はそれを他の人にとってより便利にするために汎用的にしていましたが、いくつかのデータを追加します – Lyall

答えて

3

次のクエリを使用することができます。

SELECT Col1, Col2, Col3 
FROM (
    SELECT Col1, Col2, Col3, 
     COUNT(*) OVER (PARTITION BY Col1) AS cnt 
    FROM mytable) AS t 
WHERE t.cnt > 1 

クエリがCOUNT集約関数の窓のバージョンを使用しています:関数はCol1パーティション上に適用されます。外部クエリは、Col1の値を1回だけ表示するレコードをフィルタリングします。

+0

完璧な感謝! – Lyall

1

あなたがしようとしていることはあまり明確ではありませんが、これはあなたが探しているものですか?

with MyDupes as 
(
    Select MyColumnWithDupes 
     , COUNT(*) as RowCount 
    from SomeTable 
    Group by MyColumnWithDupes 
) 

select * 
from SomeTable st 
join MyDupes md on md.MyColumnWithDupes = st.MyColumnWithDupes 
where md.RowCount > 1 
関連する問題