2010-12-13 13 views
2

次の文を返します。この:ネストされたSQL/DELETE文

select rowid,name,compound,COUNT(*) from qvalues where rowid in (select rowid from batchinfo where instrument='tf1') 
group by rowid,name,compound 
having COUNT(*)>1 



rowid name compound (No column name) 
19300 QC1 ETG 2 
20379 QC4 ETS 2 
20686 QC2 ETG 2 
19402 QC1 ETG 2 
23605 QC1 ETG 2 
21705 QC3 ETS 2 
23678 QC1 ETG 2 
18480 QC2 ETG 2 

..... ...... .....

私はqvaluesと呼ばれる別のテーブルを持っています:私は何をする必要があるか

rid name compound rt response finalConc qvalue rowid 
229263 QC3 Hydromorphone 0.69 6228.00 82.53 98 4695 
229264 QC3 Morphine 0.51 3168.00 119.89 99 4695 
229265 QC3 Oxymorphone 0.57 2472.00 83.89 99 4695 
229266 QC3 Benzoylecgonine 2.17 20439.25 85.99 95 4695 
229267 QC3 Codeine 1.34 4829.00 82.85 96 4695 
229268 QC3 Hydrocodone 1.58 12416.00 84.99 94 4695 
229269 QC3 Oxycodone 1.47 5430.00 78.44 94 4695 
229270 QC3 Buprenorphine 2.54 366.13 10.41 98 4695 
229271 QC3 Mepbrobamate 2.50 1330.34 95.56 92 4695 
229272 QC3 Methadone 2.68 85897.27 86.77 92 4695 

は、最初のセットからROWID、NAME、化合物の組み合わせを取り、第二セットでの最初のオカレンスだけを保持しています。私は化合物からROWID、NAME、COMPOUNDの組み合わせを持つ他のすべての行を削除する必要があります。 RIDが最も小さいところでこの組み合わせを維持する必要があります。

私は何も

+1

これまでに書いたコードを投稿してください。人々は一般的にあなたのためのコードを書くのが好きではありません。それはそのままで、これは仕事の説明であり、質問ではありません。 –

+0

私はあなたがこの質問を何度も聞いているかもしれないと思います(http://stackoverflow.com/questions/4434118/select-statement-to-find-duplicates-on-certain-fields)。その質問からの私の答えをDELETEステートメントで使って、あなたの解決策を得ました。私たちはおそらくこれを閉じるべきです... –

答えて

0

を明確にする必要がある場合、私はMIN(ROWID)を有する、名前、化合物によってグループ化、第二セットの表の別名を作成し、最初のセットにそれに参加したい教えてください。

次に、NOT INを使用してそのセットに含まれていないものをすべて削除します。

+0

これは素晴らしいアイデアです。ありがとうございました。 –

+0

あなたがこれまでに得たものを見せて嬉しいです。 – Sam

0

回数= 1で、それは常に持つレコードであるため、あなたは最小のRIDを持つレコードを除いてbatchinfoにあるすべてのものを削除したい...

delete qvalues where rid in 
    (select rid 
    from qvalues 
    where rowid in (select rowid from batchinfo where instrument='tf1') 
    except 
    select rid 
    from (select rid=min(rid) 
     from qvalues 
     where rowid in (select rowid from batchinfo where instrument='tf1') 
     group by rowid,name,compound) x); 

数> 2は必要ありません小さいものを取り除く。

+0

')'の近くに構文が正しくありません。 –

+0

@herrow申し訳ありませんが、誤った構文はありません(少なくともSQL Server 2008 SP2では) –