Para eliminar filas duplicadas en SQL SERVER, podemos seguir estos pasos:
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?
admin
July 28, 2011
SQL SERVER
No Comment