Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

T-SQL:Menghapus semua baris duplikat tetapi menyimpannya

Anda tidak mengatakan versi apa yang Anda gunakan, tetapi dalam SQL 2005 dan yang lebih baru, Anda dapat menggunakan ekspresi tabel umum dengan Klausa OVER. Kurang lebih seperti ini:

WITH cte AS (
  SELECT[foo], [bar], 
     row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn]
  FROM TABLE
)
DELETE cte WHERE [rn] > 1

Main-main dengannya dan lihat apa yang Anda dapatkan.

(Sunting:Untuk membantu, seseorang mengedit ORDER BY klausul dalam CTE. Agar jelas, Anda dapat memesan dengan apa pun yang Anda inginkan di sini, tidak perlu salah satu kolom yang dikembalikan oleh cte. Faktanya, kasus penggunaan umum di sini adalah bahwa "foo, bar" adalah pengidentifikasi grup dan "baz" adalah semacam cap waktu. Untuk mendapatkan yang terbaru, Anda akan melakukan ORDER BY baz desc )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Impor Beberapa File CSV ke SQL Server dari Folder

  2. Transpose satu set baris sebagai kolom di SQL Server 2000

  3. Cara Mendefinisikan Ulang Kolom yang Dikembalikan oleh Prosedur Tersimpan di SQL Server

  4. Cara menghasilkan bidang kenaikan otomatis dalam kueri pemilihan

  5. Apakah mungkin untuk memilih data server sql menggunakan posisi ordinal kolom