none
Consulta y eliminar para registros duplicados RRS feed

  • Pregunta

  • Buen dia, tengo una tabla con registros duplicados, como realizar un consulta donde me muestre los registros duplicados y posterior eliminarlos para que la tabla no contenga registros duplicados?
    miércoles, 4 de enero de 2017 1:38

Respuestas

  • Felipe de Jesus Perez,

    La siguiente consulta elimina las filas duplicadas (se entiende que una fila no es única cuando el valor de todas las columnas es igual a otra(s) filas(s)):

    WITH T AS
    (
        SELECT *, 
        ROW_NUMBER() OVER(PARTITION BY Col1, Col2, Col3 ORDER BY Col1) AS [F]
        FROM NombreTabla
    )
    DELETE FROM T WHERE F <> 1;




    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    miércoles, 4 de enero de 2017 1:58

Todas las respuestas

  • Felipe de Jesus Perez,

    La siguiente consulta elimina las filas duplicadas (se entiende que una fila no es única cuando el valor de todas las columnas es igual a otra(s) filas(s)):

    WITH T AS
    (
        SELECT *, 
        ROW_NUMBER() OVER(PARTITION BY Col1, Col2, Col3 ORDER BY Col1) AS [F]
        FROM NombreTabla
    )
    DELETE FROM T WHERE F <> 1;




    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    miércoles, 4 de enero de 2017 1:58
  • Hola que tal Felipe aqui te paso un ejemplo de como puedo mostrar y eliminar los registros duplicados.

    USE tempdb
    GO

    --Creamos una tabla de Prueba
    CREATE TABLE Test(
    id int primary key identity(1,1),
    nombre varchar(15),
    apellido varchar(20))

    --Insertamos algunos registros repetidos
    INSERT INTO Test(nombre,apellido)
              VALUES('Jorge','Muchaypiña'),
           ('Ricardo','Garcia'),
    ('Jorge','Muchaypiña'),
    ('Manuel','Herrera'),
    ('Ricardo','Garcia')

    --Mostrar los datos que seran eliminados
    SELECT * FROM Test
    WHERE id not in (
    SELECT max(id) FROM Test
    group by nombre,apellido)

    --Borramos los registros que estan repetidos y seran eliminados
    DELETE FROM Test
    WHERE id not in (
    SELECT max(id) FROM Test
    group by nombre,apellido)

    --Mostramos ahora solo los datos unicos
    Select * from Test

    Saludos,

    Jorge Muchaypiña G.


    Business Intelligence Analyst

    miércoles, 4 de enero de 2017 2:16
  • Aquí te paso otro ejemplo de como poder resolverlo, hay varias maneras.

    USE tempdb
    GO

    DROP TABLE Test2
    --Creamos una tabla de Prueba
    CREATE TABLE Test2(
    id int primary key identity(1,1),
    nombre varchar(15),
    apellido varchar(20))

    --Insertamos algunos registros repetidos
    INSERT INTO Test2(nombre,apellido)
              VALUES('Jorge','Muchaypiña'),
           ('Ricardo','Garcia'),
    ('Jorge','Muchaypiña'),
    ('Manuel','Herrera'),
    ('Ricardo','Garcia'),
    ('Jorge','Muchaypiña'),
    ('Manuel','Herrera')


    --Aqui podras ver varios registros que se repiten mas de una vez
    Select * from Test2

    --PASO 1: Para ver los unicos podriamos usar una funcion de WINDOWS FUNCTION

    SELECT nombre,apellido, row_number() over(partition by nombre,apellido order by id) orden
    FROM Test2

    --PASO 2: con un CTE ver solo los registros que no se repiten
    WITH Vista_unica as
    (
    SELECT nombre,apellido, row_number() over(partition by nombre,apellido order by id) orden
    FROM Test2)
    SELECT nombre,apellido from Vista_unica
    where orden=1

    Saludos,

    Jorge Muchaypiña G.


    Business Intelligence Analyst

    miércoles, 4 de enero de 2017 2:23