none
Actualizar registros de 3 en 3 RRS feed

  • Pregunta

  • Tengo una tabla (o conjunto de registros) , un Id y un valor.

    Si la tabla no tiene ID, podría generar un row_number().

    +---------+-----------+
    | CoachID |   Valor   |
    +---------+-----------+
    |       1 | VALOR 1   |
    |       2 | VALOR 2   |
    |       3 | VALOR 3   |
    |       4 | VALOR 4   |
    |       5 | VALOR 5   |
    |       6 | VALOR 6   |
    |       7 | VALOR 7   |
    |       8 | VALOR 8   |
    |       9 | VALOR 9   |
    |      10 | VALOR 10  |
    |      11 | VALOR 11  |
    |      12 | VALOR 12  |
    +---------+-----------+
    

    Supongamos tenemos 3 valores: AAA, BBB, CCC.

    Queremos actualizar esa tabla con esos 3 valores, en secuencia:

    primer registro AAA,
    segundo registro BBB
    tercer registros CCC
    cuarto registro AAA
    y así sucesivamente.

    +---------+-----------+
    | CoachID |   Valor   |
    +---------+-----------+
    |       1 | AAA       |
    |       2 | BBB       |
    |       3 | CCC       |
    |       4 | AAA       |
    |       5 | BBB       |
    |       6 | CCC       |
    |       7 | AAA       |
    |       8 | BBB       |
    |       9 | CCC       |
    |      10 | AAA       |
    |      11 | BBB       |
    |      12 | CCC       |
    +---------+-----------+

    Alguna sugerencia? Intento con un row_number, pero necesito que sea "de 3 en 3"

    martes, 1 de octubre de 2019 21:14

Respuestas

  • Hola Miriam Pasión:

    Adicional a las respuestas que te ha facilitado ya José Diz, una sugerencia con row number, o por si coachid tiene algún hueco.

    create table coach (
       coachId int
     , valor Varchar(10)
     )
    go
    
    insert into coach 
    (coachId, valor)
    values
    (1,'VALOR 1'),
    (2,'VALOR 2'),
    (3,'VALOR 3'),
    (4,'VALOR 4'),
    (5,'VALOR 5'),
    (6,'VALOR 6'),
    (7,'VALOR 7'),
    (8,'VALOR 8'),
    -- falta el registro 9
    (10,'VALOR 9'),
    (11,'VALOR 10'),
    (12,'VALOR 11'),
    (13,'VALOR 12');
    GO
    ;WITH R AS (
        SELECT 
    		  ((ROW_NUMBER() OVER(ORDER BY COACHID))-1)/3 AS ROW,
    		  coachId,
    		  VALOR
    	   FROM COACH
        ), R2 AS (
    	   SELECT 
    		  R.ROW, 
    		  R.VALOR, 
    		  R.COACHID,
    		  ROW_NUMBER() OVER(PARTITION BY R.ROW ORDER BY (COACHID)) AS SEQ
    		  FROM R
    	   )
    	   UPDATE R2 SET valor = CASE R2.SEQ WHEN 1 THEN 'VALOR1' 
    								   WHEN 2 THEN 'VALOR2'
    								   WHEN 3 THEN 'VALOR3' END
    			 FROM R2;
    GO

    miércoles, 2 de octubre de 2019 4:40
  • Deleted
    • Propuesto como respuesta Sergio S Arias martes, 1 de octubre de 2019 21:31
    • Marcado como respuesta Miriam Pasion jueves, 3 de octubre de 2019 19:04
    martes, 1 de octubre de 2019 21:28

Todas las respuestas

  • Deleted
    • Propuesto como respuesta Sergio S Arias martes, 1 de octubre de 2019 21:31
    • Marcado como respuesta Miriam Pasion jueves, 3 de octubre de 2019 19:04
    martes, 1 de octubre de 2019 21:28
  • Hola Miriam Pasión:

    Adicional a las respuestas que te ha facilitado ya José Diz, una sugerencia con row number, o por si coachid tiene algún hueco.

    create table coach (
       coachId int
     , valor Varchar(10)
     )
    go
    
    insert into coach 
    (coachId, valor)
    values
    (1,'VALOR 1'),
    (2,'VALOR 2'),
    (3,'VALOR 3'),
    (4,'VALOR 4'),
    (5,'VALOR 5'),
    (6,'VALOR 6'),
    (7,'VALOR 7'),
    (8,'VALOR 8'),
    -- falta el registro 9
    (10,'VALOR 9'),
    (11,'VALOR 10'),
    (12,'VALOR 11'),
    (13,'VALOR 12');
    GO
    ;WITH R AS (
        SELECT 
    		  ((ROW_NUMBER() OVER(ORDER BY COACHID))-1)/3 AS ROW,
    		  coachId,
    		  VALOR
    	   FROM COACH
        ), R2 AS (
    	   SELECT 
    		  R.ROW, 
    		  R.VALOR, 
    		  R.COACHID,
    		  ROW_NUMBER() OVER(PARTITION BY R.ROW ORDER BY (COACHID)) AS SEQ
    		  FROM R
    	   )
    	   UPDATE R2 SET valor = CASE R2.SEQ WHEN 1 THEN 'VALOR1' 
    								   WHEN 2 THEN 'VALOR2'
    								   WHEN 3 THEN 'VALOR3' END
    			 FROM R2;
    GO

    miércoles, 2 de octubre de 2019 4:40