簡體   English   中英

T-SQL刪除一半沒有主鍵的重復項

[英]T-SQL Delete half of duplicates with no primary key

在T-SQL存儲過程中,我有一個復雜的過程,即使用臨時表比較數據,但是當我返回單個表時,最終會出現重復的行。 在這些行中,行中的所有列都完全相同,並且此表中沒有主鍵。 我需要根據行發生的次數僅刪除其中的一半。 例如,如果有八行都是相同的值。 我想刪除其中的四個。

沒有辦法通過我的SP過濾擺脫它們,因為輸入的數據實際上是用戶輸入的重復信息,但我確實需要一半的信息。

我已經對這個主題進行了一些研究,並進行了一些測試,但似乎不可能刪除一半重復的行。 這不可能嗎? 或者有辦法嗎?

這是一種方法,使用SQL Server的一個很棒的功能,可更新的CTE:

with todelete as (
      select t.*,
             row_number() over (partition by col1, col2, col3, . . . order by newid()) as seqnum
      from table t
     )
delete from todelete
    where seqnum % 2 = 0;

這將刪除所有其他值。

假設SQL Server 2005+:

;WITH CTE AS
(
    SELECT  *,
            RN=ROW_NUMBER() OVER(PARTITION BY Col1, Col2,...Coln ORDER BY Col1)
    FROM YourTempTableHere
)
DELETE FROM CTE
WHERE RN = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM