2017-10-06 64 views
1

我需要從行號475至948中刪除,因爲它們是行1-474的重複項。我認爲這將是接近這一點的東西,還是有更多呢?如何通過SQL中的行號刪除

DELETE FROM dbo.industry WHERE row_number between 475 and 948 
+0

你有一個主鍵,就像在數據庫中的ID的東西嗎?如果你這樣做,你可以很容易地刪除ID。 –

+1

'row_number'是表中的一列嗎?該列中的值是475-948是您想要刪除的行嗎? – David

+0

@MichaelPlatt,我有一個由9個字段組成的複合主鍵。 –

回答

0

這不是一個真正的答案。數據中出現了一些問題,使得上面的答案(雖然優秀)無關。我只是刪除了表格,然後從固定寬度重新導入它。這一次,我更加小心,沒有重複。

0
SELECT DISTINCT * 
INTO #Temp 
FROM dbo.industry 

DELETE FROM dbo.industry 

INSERT INTO dbo.industry 
SELECT * 
FROM #Temp 
+1

在上面的註釋中,OP指示該表具有主鍵。所以這是行不通的。每條記錄都將被重新插入。 – David

+0

同意,但這種方法可以很容易地進行調整,以考慮到這一點。重點在於,找到不同的值並重新創建它比替換行號匹配更有意義。 – BelgoCanadian

+0

這就是問題所在......如何定位「不同的」記錄。刪除它們的行爲不是問題。這是一個很好的嘗試,但基本上你是在揮手去解決實際問題。 – David

1
DELETE FROM dbo.industry 
WHERE COLUMN_NAME IN  -- Choose a column name 
    (SELECT TOP 1000 
    COLUMN_NAME,   -- Choose a column name 
    ROW_NUMBER() OVER(ORDER by COLUMN_NAME ASC) AS Row_Number 
    FROM dbo.industry 
    WHERE Row_Number BETWEEN 475 AND 948) 

COLUMN_NAME可以是你的表的任何列名u想要的。

0
DELETE FROM dbo.industry WHERE dbo.industry. 
REPLACE WITH PK COLUMN NAME| IN (SELECT TOP 948 dbo.industry 
REPLACE WITH PK COLUMN NAME| FROM dbo.industry WHERE dbo.industry 
REPLACE WITH PK COLUMN NAME| > 475 ORDER BY dbo.industry 
REPLACE WITH PK COLUMN NAME|) 
0

可能爲時已晚,但我通常這樣做

; with cte(rownum)as(
    select row_number() over(partition by [Col1], [Col2] order by Col3) from [table] 
) 
delete from cte where rownum > 1