none
insertar columnas de una tabla a otra donde coincida el id

    Question

  • hola tengo dos tablas y necesito insertar los datos de una a otra donde coincida con el id, ya hice lo siguiente pero no funciona inserta los registros pero no donde coinciden sino despues de todos los registros que ya tengo, es decir si tengo 5 registros, inserta la informacion creando a partr del registro 6

    INSERT INTO AGENTES (DNI,APELLIDOS,NOMBRE)
    SELECT B.DNI,B.APELLIDOS,B.NOMBRE FROM DSTOSAG A
    LEFT JOIN DSTOSAG B ON  A.CLAVE=B.CLAVE
    WHERE A.CLAVE=B.CLAVE


    velma kelly

    Monday, February 20, 2012 5:39 AM

Answers

  • Velma,

    Esta parte de la consulta te devuelve exactamente los mismos registros que tenga DSTOSAG:

    SELECT B.DNI,B.APELLIDOS,B.NOMBRE 
    FROM DSTOSAG A 
    LEFT JOIN DSTOSAG B 
    ON A.CLAVE=B.CLAVE WHERE A.CLAVE=B.CLAVE

    Es exactamente equivalente a:

    SELECT B.DNI,B.APELLIDOS,B.NOMBRE 
    FROM DSTOSAG B
    

    No entiendo muy bien tu pregunta pero creo que lo que quieres es actualizar los registros de AGENTES. En ese caso, lo que debes hacer es:

    UPDATE AGENTES
    SET
       APELLIDOS = B.APELLIDOS,
       Nombre = B.NOMBRE
    FROM DSTOSAG B
    WHERE AGENTES.DNI = B.DNI


    Si la respuesta te ha servido, márcala como útil.

    • Marked as answer by velma_kelly Wednesday, February 22, 2012 1:37 AM
    Monday, February 20, 2012 4:23 PM

All replies

  • Hola.

    Es preciso que te expliques un poco mejor. ¿Quieres insertar o actualizar registros ya existentes? ¿O ambas cosas (insertar los que no estén y actualizar los que sí? En la sentencia que indicas, cruzas una tabla consigo misma, sin que ello parezca que tenga sentido alguno.

    En esa línea, adjunta scripts de creación de tablas, datos de ejemplo y resultado final esperado.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    Monday, February 20, 2012 2:00 PM
  • Velma,

    Esta parte de la consulta te devuelve exactamente los mismos registros que tenga DSTOSAG:

    SELECT B.DNI,B.APELLIDOS,B.NOMBRE 
    FROM DSTOSAG A 
    LEFT JOIN DSTOSAG B 
    ON A.CLAVE=B.CLAVE WHERE A.CLAVE=B.CLAVE

    Es exactamente equivalente a:

    SELECT B.DNI,B.APELLIDOS,B.NOMBRE 
    FROM DSTOSAG B
    

    No entiendo muy bien tu pregunta pero creo que lo que quieres es actualizar los registros de AGENTES. En ese caso, lo que debes hacer es:

    UPDATE AGENTES
    SET
       APELLIDOS = B.APELLIDOS,
       Nombre = B.NOMBRE
    FROM DSTOSAG B
    WHERE AGENTES.DNI = B.DNI


    Si la respuesta te ha servido, márcala como útil.

    • Marked as answer by velma_kelly Wednesday, February 22, 2012 1:37 AM
    Monday, February 20, 2012 4:23 PM
  • Muchas gracias por responder, si estaba cometiendo el error de que insertar en lugar de actualizar ya esta solucionado precisamente con sus respuestas, pero quisiera molestarles con otra duda con la que estoy atorada, tengo una tabla con:

    MATRICULA                 REGISTRO                      STATUS

    5263              2012-02-17 12:37:24.637            AA
    5263              2012-02-17 17:12:13.777            AB

    3244449        2012-02-17 14:08:21.203            AA
    3244449        2012-02-17 14:45:58.167            AB
    3244449        2012-02-17 15:05:34.710            AC

    Y lo que necesito sacar es:

    matricula      status1                      dif1                  status2             dif2

    5263                AB                00:23:25:658                                                                  324449            AB                00:37:15:521               AC             01:45:288    

                                                   * DIF  AB-AA                             *DIF AC-AA

    Es decir crear una tabla que vaya mostrando el cambio de status de la matricula y sacar la diferencia de tiempo entre el primer registro y los demas que se acomulen, tomando en cuenta que son N cantidad de cambios en una matricula por lo que tendria que ser dinamico, tengo  la parte de las tablas dinamicas, cuento el numero de cambios por matricula y agrego las columnas y los datos necesarios, lo que aun no resuelvo es hacer la operacion de la diferencia entre las horas para agregarlas en la tabla.

     Alguna sugerencia?

    De antemano gracias por la ayuda.


    velma kelly


    • Edited by velma_kelly Wednesday, February 22, 2012 3:07 PM
    Wednesday, February 22, 2012 2:00 AM