none
actualización de datos que no estan relacionados SQL 2008 R2 RRS feed

  • Pregunta

  • saludos, tengo la siguiente tabla 

    create table #tramites
    (
    idTramite    int primary key,
    idResolvedor int,
    idTipoTramite int
    )
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(101,1,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(102,1,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(103,1,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(104,1,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(105,1,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(106,1,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(107,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(108,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(109,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(110,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(207,2,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(208,2,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(209,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(210,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(211,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(212,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(213,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(214,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(215,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(216,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(225,3,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(226,3,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(227,3,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(228,3,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(229,3,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(230,3,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(231,3,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(232,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(233,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(234,null,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(235,4,123)
    insert into #tramites(idTramite,idResolvedor,idTipoTramite)values(236,4,123)
    
    select * from #tramites
    
    drop table #tramites

    el cual genera estos datos(vista parcial)

    tengo esta otra tabla

    create table #tramitesxResolvedor
    (idResolvedor int,
     cantramites int
     )
     insert into #tramitesxResolvedor (idResolvedor,cantramites) values(1,4)
     insert into #tramitesxResolvedor (idResolvedor,cantramites) values(2,8)
     insert into #tramitesxResolvedor (idResolvedor,cantramites) values(3,3)
    
     select * from #tramitesxResolvedor
     drop table #tramitesxResolvedor

    Lo que necesito es que en la tabla trámites se actualizen los registros con idResolvedor igual a null y se ponga el valor del idResolvedor de La tabla tramitesxResolvedor en la cantidad que falta indicada en este misma tabla en el campo cantramites

    por ejemplo a idResolvedor 1 le faltan actualizar 4 trámites debería quedar asi, el número de trámite a actualizar no necesariamente debe ser consecutivo es una referencia ,y así con todos los otros idResolvedor

    De preferencia utilizar los datos como conjuntos y evitar cursores o bucles de ser posible

    idTramite idResolvedor idTipoTramite
    101 1 123
    102 1 123
    103 1 123
    104 1 123
    105 1 123
    106 1 123
    107 1 123
    108 1 123
    109 1 123
    110 1 123






    • Editado Augusto C lunes, 4 de febrero de 2019 3:47
    lunes, 4 de febrero de 2019 3:37

Respuestas

  • Hola Javi Fernández , gracias por tu respuesta , hay un detalle que creo no explique bien , los idResolvedor de la tabla Tramites no necesariamente presentan esos huecos , pueden estar todos contiguos, por eso para saber cuantos deben actualizarse esta la tabla tramitesxResolvedor

    los datos podrían estar asi


    • Editado Augusto C lunes, 4 de febrero de 2019 15:22
    • Marcado como respuesta Augusto C lunes, 4 de febrero de 2019 19:13
    lunes, 4 de febrero de 2019 15:21

Todas las respuestas

  • Hola Augusto C:

    Creo que lo más importante de tu serie, no era visualizar los que pertenecen al idResolvedor 1 sino al resto.

    Para esta serie, puedes aplicar algo así:

    ;WITH cte
         AS (SELECT ROW_NUMBER() OVER(
                    ORDER BY idTramite) AS fila, 
                    t.idTramite, 
                    t.idTipoTramite, 
                    t.idResolvedor
             FROM tramites t),
         cte2
         AS (SELECT fila, 
                    DENSE_RANK() OVER(
                    ORDER BY idTramite - fila) AS serie, 
                    c.idTipoTramite, 
    				c.idTramite,
                    c.idResolvedor
             FROM cte c)
         UPDATE tramites
           SET 
               idResolvedor = c.serie
         FROM tramites t
              JOIN cte2 c ON t.idTramite = c.idTramite
    		  where t.idResolvedor is null;
    

    De manera que los tramites 107 a 110 quedarán asignados al 1, los 209 a 216 al 2 y 232 a 234 al 3.

    ¿Esta era tu pregunta? o yo no he entendido lo que querías.

    • Propuesto como respuesta Pedro Alfaro lunes, 4 de febrero de 2019 16:15
    • Votado como útil Augusto C lunes, 4 de febrero de 2019 16:36
    • Propuesto como respuesta Pedro Alfaro lunes, 4 de febrero de 2019 18:33
    • Votado como útil Augusto C lunes, 4 de febrero de 2019 19:05
    lunes, 4 de febrero de 2019 5:49
  • Hola Javi Fernández , gracias por tu respuesta , hay un detalle que creo no explique bien , los idResolvedor de la tabla Tramites no necesariamente presentan esos huecos , pueden estar todos contiguos, por eso para saber cuantos deben actualizarse esta la tabla tramitesxResolvedor

    los datos podrían estar asi


    • Editado Augusto C lunes, 4 de febrero de 2019 15:22
    • Marcado como respuesta Augusto C lunes, 4 de febrero de 2019 19:13
    lunes, 4 de febrero de 2019 15:21