web-dev-qa-db-ja.com

列内の重複エントリを見つける

Table1で重複したCTNレコードを見つけるためにこのクエリを作成しています。したがって、私の考えは、CTN_NOが2回以上表示される場合、SELECT *ステートメントの出力に表示されるようにすることです。

次のサブクエリロジックを試しましたが、プルが必要です

  SELECT *
         table1 
   WHERE S_IND='Y'
     and CTN_NO = (select CTN_NO 
                     from table1 
                    where S_IND='Y' 
                      and count(CTN_NO) < 2);
order by 2
40
anwarma

を使用して:

  SELECT t.ctn_no
    FROM YOUR_TABLE t
GROUP BY t.ctn_no
  HAVING COUNT(t.ctn_no) > 1

... ctn_noテーブルに重複している値。 WHEREに基準を追加すると、重複するものをさらに調整できます。

  SELECT t.ctn_no
    FROM YOUR_TABLE t
   WHERE t.s_ind = 'Y'
GROUP BY t.ctn_no
  HAVING COUNT(t.ctn_no) > 1

複製に関連付けられている他の列の値を表示する場合は、自己結合を使用します。

SELECT x.*
  FROM YOUR_TABLE x
  JOIN (SELECT t.ctn_no
          FROM YOUR_TABLE t
      GROUP BY t.ctn_no
        HAVING COUNT(t.ctn_no) > 1) y ON y.ctn_no = x.ctn_no
100
OMG Ponies

このクエリを試してください。分析関数SUMを使用します。

SELECT * FROM
(  
 SELECT SUM(1) OVER(PARTITION BY ctn_no) cnt, A.*
 FROM table1 a 
 WHERE s_ind ='Y'   
)
WHERE cnt > 2

Ctn_noが2回以上繰り返される場合に、レコードを重複として識別する理由はわかりません。私のために、それが複製である以上の回数を繰り返します。この場合、クエリのラス部分をWHERE cnt > 1に変更します

2
Chandu