Bisakah Anda membantu saya dengan pernyataan SQL untuk menemukan duplikat di beberapa bidang?
Misalnya, dalam kode pseudo:
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
dan dari pernyataan di atas jika ada beberapa kejadian saya ingin memilih setiap catatan kecuali yang pertama .
sql
sql-server
tsql
sql-server-2008
JOE SKEET
sumber
sumber
Jawaban:
Untuk mendapatkan daftar bidang yang berisi banyak catatan, Anda bisa menggunakan ..
Periksa tautan ini untuk informasi lebih lanjut tentang cara menghapus baris.
http://support.microsoft.com/kb/139444
Sunting: Seperti yang disebutkan oleh pengguna lain, harus ada kriteria untuk memutuskan bagaimana Anda mendefinisikan "baris pertama" sebelum Anda menggunakan pendekatan dalam tautan di atas. Berdasarkan hal itu Anda harus menggunakan pesanan dengan klausa dan sub kueri jika diperlukan. Jika Anda dapat memposting beberapa sampel data, itu akan sangat membantu.
sumber
Anda menyebutkan "yang pertama", jadi saya berasumsi bahwa Anda memiliki semacam pemesanan pada data Anda. Mari kita asumsikan bahwa data Anda dipesan oleh beberapa bidang
ID
.SQL ini akan membuat Anda entri duplikat kecuali yang pertama. Itu pada dasarnya memilih semua baris yang baris lain dengan (a) bidang yang sama dan (b) ada ID yang lebih rendah. Performa tidak akan bagus, tetapi mungkin bisa menyelesaikan masalah Anda.
sumber
Ini adalah solusi yang menyenangkan dengan SQL Server 2005 yang saya sukai. Saya akan berasumsi bahwa dengan "untuk setiap catatan kecuali yang pertama", maksud Anda ada kolom "id" lain yang bisa kita gunakan untuk mengidentifikasi baris mana yang "pertama".
sumber
Untuk melihat nilai duplikat:
sumber
Jika Anda menggunakan SQL Server 2005 atau lebih baru (dan tag untuk pertanyaan Anda menunjukkan SQL Server 2008), Anda dapat menggunakan fungsi peringkat untuk mengembalikan catatan duplikat setelah yang pertama jika menggunakan gabungan kurang diinginkan atau tidak praktis karena beberapa alasan. Contoh berikut menunjukkan ini dalam tindakan, di mana ia juga bekerja dengan nilai nol di kolom yang diperiksa.
Perhatikan setelah menjalankan contoh ini bahwa catatan pertama dari setiap "grup" dikecualikan, dan bahwa catatan dengan nilai nol ditangani dengan benar.
Jika Anda tidak memiliki kolom yang tersedia untuk memesan catatan dalam grup, Anda dapat menggunakan kolom partisi-per sebagai kolom urutan-oleh.
sumber
sumber
coba kueri ini untuk mendapatkan sepratley count dari setiap pernyataan SELECT:
sumber