web-dev-qa-db-ja.com

SQLで行番号で削除する方法

行番号475から948までを削除する必要があります。行1〜474が重複しているためです。それはこれに近いものだと思いますか、それとももっとありますか?

DELETE FROM dbo.industry WHERE row_number between 475 and 948
9
Tim Wilcox

これは本当に答えではありません。上記の回答(優れているものの)を無関係にするデータにはいくつかの問題がありました。テーブルを削除して、固定幅から再度インポートしました。今回、私はより注意深く、重複がありませんでした。

0
Tim Wilcox

手遅れかもしれませんが、私は通常これをやっています

; with cte(rownum)as(
    select row_number () over(partition by [Col1], [Col2] order by Col3) from [table]
)
delete from cte where rownum > 1
7
fly_ua
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には、必要なテーブルの任意の列名を指定できます。

1
Dr. X

Row_Number関数を使用して削除しようとすると、次のエラーが発生します。

ウィンドウ関数はSELECTまたはORDER BY句でのみ使用できます

以下の例のように、SQLを修正してselect句に含めることができます。

Delete T 
From (Select Row_Number() Over(Partition By [IndustryType], [IndustryDescription] order By [ID]) As RowNumber,* 
From dbo.industry) T
Where T.RowNumber > 1
0
Kerry Jackson
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|)
SELECT DISTINCT *
INTO #Temp
FROM dbo.industry

DELETE FROM dbo.industry

INSERT INTO dbo.industry
SELECT *
FROM #Temp
0
BelgoCanadian