web-dev-qa-db-fra.com

Comment supprimer par numéro de ligne en SQL

Je dois supprimer les lignes 475 à 948, car elles sont des doublons des lignes 1-474. Je présume que ce serait quelque chose de proche, ou y at-il autre chose?

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

Ce n'est pas vraiment une réponse. Il y avait quelques problèmes avec les données qui ont rendu les réponses ci-dessus (bien qu'excellentes) indépendantes J'ai simplement supprimé le tableau, puis l'ai réimporté de largeur fixe. Cette fois, j'ai été plus prudent et je n'ai pas eu le double emploi. 

0
Tim Wilcox

Peut-être qu'il est trop tard, mais je le fais habituellement

; with cte(rownum)as(
    select row_number () over(partition by [Col1], [Col2] order by Col3) from [table]
)
delete from cte where rownum > 1
2
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 peut être n'importe quel nom de colonne de votre table.

1
Dr. Geek
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