Eliminar duplicados en SQL SERVER

Para eliminar filas duplicadas en SQL SERVER, podemos seguir estos pasos:

  1. Crear una tabla que contenga las columnas clave y la cantidad de registros
    duplicados.
  2. Crear una tabla que contenga las filas distintas sin repetir
  3. Eliminar la totalidad de filas duplicadas de la tabla original
  4. Insertar las filas distintas de la tabla creada

Comenzemos creando una tabla e insertandole registros:

CREATE TABLE Prueba
(
Folio int,
Descripcion varchar(50)
)

INSERT INTO Prueba VALUES
(1,'Prueba'),(1,'Prueba'),(1,'Prueba'),
(2,'Otra prueba'),(3,'Otra prueba mas'),
(4,'Otra prueba x'),(5,'Otra prueba y')

Si seleccionamos todas la filas de la tabla mediante: SELECT * FROM Prueba
Obtenemos:

Folio Descripcion
———– ——————————
1 Prueba
1 Prueba
1 Prueba
2 Otra prueba
3 Otra prueba mas
4 Otra prueba x
5 Otra prueba y

(7 row(s) affected)

Son tres filas las repetidas. Vamos a insertarlas en una tabla temporal, agrupadas por la clave, que en este caso es la columna “Folio” (Este ejemplo es sencillo y se utiliza una sola columna, pero pueden ser N columnas, dependiendo de cada caso)

SELECT Folio, COUNT(*) Cant
INTO #TempK
FROM Prueba
GROUP BY Folio
HAVING COUNT(*) > 1

Si seleccionamos las filas de la tabla temporal #TempK obtenemos:

Folio Cant
———– ———–
1 3
(1 row(s) affected)

Ahora proseguimos a realizar una instrucción “SELECT DISTINCT INTO” para crear
una tabla con las filas distintas, sin duplicados:

SELECT DISTINCT P.Folio, P.Descripcion
INTO #TempC
FROM Prueba P, #TempK T
WHERE P.Folio = T.Folio

Si seleccionamos todas las filas en #TempC tenemos:

Folio Descripcion
———– ——————————
1 Prueba
(1 row(s) affected)

Ya tenemos las filas sin duplicados. Ahora bien, procedemos a eliminar las filas
duplicadas en la tabla original:

DELETE Prueba
FROM Prueba P, #TempK T
WHERE P.Folio = T.Folio

Y ha insertar las filas distintas, sin duplicar:

INSERT Prueba
SELECT *
FROM #TempC

Ahora, seleccionamos todas las filas de la columna original:

SELECT * FROM Prueba

Y tenemos:

Folio Descripcion
———– ——————————
1 Prueba
2 Otra prueba
3 Otra prueba mas
4 Otra prueba x
5 Otra prueba y
(5 row(s) affected)

La tabla sin duplicados. ¿Simple no?

Related Posts

CURRENT_IDENT y RESEED en Sql Server Compact Edition

admin

April 21, 2018

SQL SERVER

No Comment

Sql Server Compact Edition no cuenta con funciones como RESEED o CURRENT_IDENT, así que tenemos que hechar mano de consultas a la información de esquema y de alteración de tablas. Como sustituto a IDENT_CURRENT tenemos: [sql] SELECT AUTOINC_NEXT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ‘MiTabla’ AND COLUMN_NAME = ‘MiColumna’ [/sql] Y como sustituto a RESEED tenemos […]

Read More

Conexión a Sql Server con Php 5.6 linux CentOS 6

admin

March 28, 2016

PHP, SQL SERVER

No Comment

Para conectarse a Sql Server desde linux utilizamos este comando para instalar el driver: [bash] $ sudo yum install -y php-mssql [/bash] Por ejemplo, para php5.6: [bash] $ sudo yum install -y php56w-mssql [/bash] Esta instrucción instala freetds, una colección de librerias para conectarnos con Sql Server desde linux. Con esta librería no solo podemos […]

Read More

Leave a Reply

Your email address will not be published. Required fields are marked *