2016-10-26 14 views
0

で残りの行を削除し、残りの列に例えば重複列の値を維持し、私は重複行を維持したいSQL

を削除

Emp_no Leave_cd 
-----------------  
1234  AL 
1234  AL 
1234  AL 
1234  BT 
2345  AL 
2345  AL 
2345  AL 
2345  AL 
2345  EL 

私はベースの非重複行を削除したいですleave_cdおよびemp_no

私はこのコードを試してみましたが、コードは、テーブル

Delete from table 
where LEAVE_CD IN (Select leave_cd as d 
        from table 
        group by EMP_NO, LEAVE_CD 
        having Count(table.leave_cd) = 1) 
+0

あなたのコードはうまく見えます。その作業well.try "<= 1" – KyLim

+0

@KyLim <= 1はまだすべての行を削除します。 – FullStack

答えて

1
DELETE Table 
    --SELECT t1.* -- uncomment this line for a preview 
    FROM Table t1 
    INNER JOIN (SELECT g2.Emp_no, g2.Leave_cd 
       FROM Table g2 
       GROUP BY g2.Emp_no, g2.Leave_cd 
       HAVING COUNT(g2.Emp_no) = 1) z3 ON z3.Emp_no = t1.Emp_no 
                AND z3.LEave_cd = t1.Leave_cd 

私はあなたがこれはあなたに理にかなっていることを具体的なユースケースを持っていると確信してのすべての行を削除します。しかし、私は決してサブクラスに基づいてコードを削除するのは、一般的なプラクティスとしてはいかに簡単ではありません。

+0

感謝します。 – FullStack