行番号475から948までを削除する必要があります。行1〜474が重複しているためです。それはこれに近いものだと思いますか、それとももっとありますか?
DELETE FROM dbo.industry WHERE row_number between 475 and 948
これは本当に答えではありません。上記の回答(優れているものの)を無関係にするデータにはいくつかの問題がありました。テーブルを削除して、固定幅から再度インポートしました。今回、私はより注意深く、重複がありませんでした。
手遅れかもしれませんが、私は通常これをやっています
; with cte(rownum)as(
select row_number () over(partition by [Col1], [Col2] order by Col3) from [table]
)
delete from cte where rownum > 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には、必要なテーブルの任意の列名を指定できます。
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
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