none
MODIFICAR UN REGISTRO SI POSEE DOS O MAS REPETICIONES RRS feed

  • Pregunta

  • Buenas tardes a todos, desde ya muchas gracias por sus comentarios, todos son bienvenidos.

    El inconveniente que se me presenta es que en una tabla tengo varios registros repetidos, y quisiera marcar por medio de un update si esta repetido o no, sin embargo el primer registro que me marca como repetido deseo no marcarlo, sino a partir del segundo repetido, les muestro:

    Actualmente me sale este resultado con la siguiente sentencia:

    UPDATE Tabla1 SET Repeticion="REPETIDO" Where Telefono in (SELECT Telefono from Tabla1 Group By Telefono Having Count(*)>1)

     

    y yo deseo este resultado (realmente no se si se pueda):

    Es decir que me marque un solo repetido cuando encuentre mas de 2.

    Espero haberme explicado, sino con gusto atiendo cualquier consulta, de antemano gracias por el apoyo.

    Slds. David Castellanos


    David Castellanos

    jueves, 10 de enero de 2019 18:27

Respuestas

  • Enumera las filas por cada grupo de [telefono] y marca como "no repetido" las filas con numeracion igual a uno (1) y el resto marcalos como "repetido".

    with R as (
    select telefono, repeticion, row_number(partition by telefono order by (select NULL)) as rn
    from Tabla1
    )
    update R
    set repeticion = case when rn = 1 then 'no repetido' else 'repetido' end;

    Para que la solucion se determinista, osea que marque como no repetido la misma fila si ejecutamos la instruccion con los mismos datos, debemos usar una o mas columnas para romper el empate de filas con el mismo telefono y adicionar esta a la sub-clausula ORDER BY dentro de la clausula OVER.

    DECLARE @T table (
    id int NOT NULL IDENTITY PRIMARY KEY,
    telefono varchar(15) NOT NULL,
    repeticion varchar(15)
    );
    
    INSERT INTO @T(telefono)
    VALUES
        ('22334455'),
        ('22436576'),
        ('22436576'),
        ('22908765'),
        ('22908765'),
        ('22908765');
    
    SELECT id, telefono, repeticion
    FROM @T
    ORDER BY telefono, id;
    
    WITH R AS (
    SELECT
    	id, telefono, repeticion, ROW_NUMBER() OVER(PARTITION BY telefono ORDER BY id) AS rn
    FROM
    	@T
    )
    UPDATE R
    SET R.repeticion = CASE WHEN rn = 1 THEN 'no repetido' ELSE 'repetido' END;
    
    SELECT id, telefono, repeticion
    FROM @T
    ORDER BY telefono, id;
    GO


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    jueves, 10 de enero de 2019 19:45

Todas las respuestas

  • Enumera las filas por cada grupo de [telefono] y marca como "no repetido" las filas con numeracion igual a uno (1) y el resto marcalos como "repetido".

    with R as (
    select telefono, repeticion, row_number(partition by telefono order by (select NULL)) as rn
    from Tabla1
    )
    update R
    set repeticion = case when rn = 1 then 'no repetido' else 'repetido' end;

    Para que la solucion se determinista, osea que marque como no repetido la misma fila si ejecutamos la instruccion con los mismos datos, debemos usar una o mas columnas para romper el empate de filas con el mismo telefono y adicionar esta a la sub-clausula ORDER BY dentro de la clausula OVER.

    DECLARE @T table (
    id int NOT NULL IDENTITY PRIMARY KEY,
    telefono varchar(15) NOT NULL,
    repeticion varchar(15)
    );
    
    INSERT INTO @T(telefono)
    VALUES
        ('22334455'),
        ('22436576'),
        ('22436576'),
        ('22908765'),
        ('22908765'),
        ('22908765');
    
    SELECT id, telefono, repeticion
    FROM @T
    ORDER BY telefono, id;
    
    WITH R AS (
    SELECT
    	id, telefono, repeticion, ROW_NUMBER() OVER(PARTITION BY telefono ORDER BY id) AS rn
    FROM
    	@T
    )
    UPDATE R
    SET R.repeticion = CASE WHEN rn = 1 THEN 'no repetido' ELSE 'repetido' END;
    
    SELECT id, telefono, repeticion
    FROM @T
    ORDER BY telefono, id;
    GO


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    jueves, 10 de enero de 2019 19:45
  • Muchas gracias Hunchback, funciona perfecto!!.

    Slds.

    David Castellanos


    David Castellanos

    jueves, 10 de enero de 2019 20:04