2016-04-15 11 views
0

と一致した場合、私は私のテーブル内の3つの列2列データが

キー名を持つSQL表から1つの重複行を削除し、 番号、 データ

は、データが重複したエントリの多くで構成されています。 "KeyName"と "Data"が繰り返されている場合は、テーブルの重複エントリのそれぞれから1行を削除する必要があります。 これを達成する方法はSQLクエリです。

+1

すればよいですか? SQL Server、Postgres、MySQL ... ....? –

+0

重複が3つ以上ある場合はどうなりますか? –

+0

MineはSQLサーバーです。私は2つ以上の重複したエントリしかありません。私は手動で削除すると思った。 – Peekay

答えて

0

これは、それをあなたのRDBMSが何であるかを

WITH CTE 
    AS (SELECT KeyName 
      , Number 
      , Data 
      , [rn] = ROW_NUMBER() OVER(PARTITION BY KeyName 
              , Data ORDER BY KeyName 
                , Data) 
     FROM yourtable) 
    /* UNCOMMENT BELOW TO DELETE */ 
    --DELETE 
    --FROM CTE 
    --WHERE rn > 1; 

    SELECT * 
    FROM CTE 
    WHERE rn > 1; 
+0

これはあなたに感謝しました – Peekay

0

あなたはrow_number()を使用して、各ペアの1行を保つことができます。

with todelete as (
     select t.*, 
      row_number() over (partition by keyname, data order by (select NULL)) as seqnum 
     from t 
    ) 
delete 
from todelete 
where seqnum > 1; 

いずれかのような操作と同じように、あなたは削除する前にまず確認する必要があります。これは簡単です:

with todelete as (
     select t.*, 
      row_number() over (partition by keyname, data order by (select NULL)) as seqnum 
     from t 
    ) 
select * 
from todelete 
where seqnum > 1; 
+0

あなたの正解をちょうど受け取った。申し訳ありませんstackoverflow does notは2つの答えが正しいとマークされることを許可します。あなたの応答のためにありがとうございます – Peekay

+0

@arun。 。 。どの回答が受け入れられるかの決定は、完全にOPまでです。 –

関連する問題