我需要從行號475至948中刪除,因爲它們是行1-474的重複項。我認爲這將是接近這一點的東西,還是有更多呢?如何通過SQL中的行號刪除
DELETE FROM dbo.industry WHERE row_number between 475 and 948
我需要從行號475至948中刪除,因爲它們是行1-474的重複項。我認爲這將是接近這一點的東西,還是有更多呢?如何通過SQL中的行號刪除
DELETE FROM dbo.industry WHERE row_number between 475 and 948
這不是一個真正的答案。數據中出現了一些問題,使得上面的答案(雖然優秀)無關。我只是刪除了表格,然後從固定寬度重新導入它。這一次,我更加小心,沒有重複。
SELECT DISTINCT *
INTO #Temp
FROM dbo.industry
DELETE FROM dbo.industry
INSERT INTO dbo.industry
SELECT *
FROM #Temp
在上面的註釋中,OP指示該表具有主鍵。所以這是行不通的。每條記錄都將被重新插入。 – David
同意,但這種方法可以很容易地進行調整,以考慮到這一點。重點在於,找到不同的值並重新創建它比替換行號匹配更有意義。 – BelgoCanadian
這就是問題所在......如何定位「不同的」記錄。刪除它們的行爲不是問題。這是一個很好的嘗試,但基本上你是在揮手去解決實際問題。 – David
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想要的。
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|)
可能爲時已晚,但我通常這樣做
; with cte(rownum)as(
select row_number() over(partition by [Col1], [Col2] order by Col3) from [table]
)
delete from cte where rownum > 1
你有一個主鍵,就像在數據庫中的ID的東西嗎?如果你這樣做,你可以很容易地刪除ID。 –
'row_number'是表中的一列嗎?該列中的值是475-948是您想要刪除的行嗎? – David
@MichaelPlatt,我有一個由9個字段組成的複合主鍵。 –