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

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

Scripts de creación de objetos en Sql Server

admin

March 28, 2016

SQL SERVER

No Comment

La manera correcta de crear scripts en Sql Server para la creación de objetos, como tablas, procedimientos almacenados, funciones, restricciones, etc., es la siguiente: Primero, verificar si existe el objeto existe. Si existe, eliminarlo. Posteriormente, crear el objeto. Posteriormente, repetir para los objetos que dependen del que acabamos de crear. **Importante** Establecer siempre la base […]

Read More

Leave a Reply

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

Busca en el blog aqui

Herramientas Útiles

Suscribete al blog

Recibe en tu correo las últimas publicaciones

Publicidad

Sígueme en Twitter