none
Consulta Anidada entre dos Tablas RRS feed

  • Pregunta

  • Estimados de ante mano si alguien puede ayudarme con un este Procedure

    TABLAS 1: MANTENIMIENTO

    Unidad   TipoMante                UltimaFechaMante   Recorrido

     04         Cambio de Aceite     01/05/2016           0

     04         Rep. Caja Cambio     15/07/2016           0

     08         Cambio de Aceite      30/04/2016           0

    TABLA 2: KILOMETRAJE

    UNID  FECHA           KMS

      04    01/01/2016   200

      04    02/01/2016   200

      04    02/05/2016   200

      04    03/05/2016   200

      08    01/01/2016   200

      08    02/01/2016   200

      08    02/05/2016   200

      08    03/05/2016   200

     El objetivo es actualizar el campo (recorrido) de la Tabla MANTENIMIENTO con el resultado de una subconsulta de la tabla KILOMETRAJE cuyo campo a sumar es (KMS) y los campos de Criterio seran el campo TABLA2.UNIDAD= TABLA1.UNIDAD  Y TABLA2.FECHA>TABLA1.FECHA

    agradezco su ayuda.

    miércoles, 30 de noviembre de 2016 16:15

Respuestas

  • hola

    En tu stored procedure puedes recorrer los registros con un cursor.

    https://msdn.microsoft.com/en-us/library/ms180169.aspx

    al recorrer cada registro tienes que hacer una consulta a tu tabla de kilometraje donde por medio de una función agrupadora realices la suma de los campos.

    https://msdn.microsoft.com/es-mx/library/ms187810.aspx

    o puedes ejecutar un update masivo.

    UPDATE MANTENMIENTO SET RECORRIDO=(SELECT SUM(K.KMS) FROM KILOMETRAJE K WHERE K.UNID=MANTENIMIENTO.UNIDAD)

    Saludos

    miércoles, 30 de noviembre de 2016 16:28
  • WilderHorna,

    Puedes hacer lo siguiente:

    UPDATE m
    SET
        m.Recorrido = k.[Total recorrido]
    FROM
        MANTENIMIENTO m
        INNER JOIN
    	   (SELECT 
    		  t1.Unidad, t1.TipoMante, SUM(t2.KMS) AS 'Total recorrido'
    	   FROM
    		  MANTENIMIENTO t1
    		  INNER JOIN KILOMETRAJE t2 ON (t1.Unidad = t2.UNID)
    			 AND (t1.UltimaFechaMante > t2.FECHA)
    	   GROUP BY
    		  t1.Unidad, t1.TipoMante) k ON (m.Unidad = k.Unidad)
    			 AND (m.TipoMante = k.TipoMante)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 30 de noviembre de 2016 17:45

Todas las respuestas

  • hola

    En tu stored procedure puedes recorrer los registros con un cursor.

    https://msdn.microsoft.com/en-us/library/ms180169.aspx

    al recorrer cada registro tienes que hacer una consulta a tu tabla de kilometraje donde por medio de una función agrupadora realices la suma de los campos.

    https://msdn.microsoft.com/es-mx/library/ms187810.aspx

    o puedes ejecutar un update masivo.

    UPDATE MANTENMIENTO SET RECORRIDO=(SELECT SUM(K.KMS) FROM KILOMETRAJE K WHERE K.UNID=MANTENIMIENTO.UNIDAD)

    Saludos

    miércoles, 30 de noviembre de 2016 16:28
  • Me imagino que quieres algo asi:

    UPDATE Tabla1 SET Recorrido=(SELECT SUM(KMS) FROM Tabla2 Where Tabla2.Unidad = Tabla1.Unidad)

    miércoles, 30 de noviembre de 2016 16:36
  • WilderHorna,

    Puedes hacer lo siguiente:

    UPDATE m
    SET
        m.Recorrido = k.[Total recorrido]
    FROM
        MANTENIMIENTO m
        INNER JOIN
    	   (SELECT 
    		  t1.Unidad, t1.TipoMante, SUM(t2.KMS) AS 'Total recorrido'
    	   FROM
    		  MANTENIMIENTO t1
    		  INNER JOIN KILOMETRAJE t2 ON (t1.Unidad = t2.UNID)
    			 AND (t1.UltimaFechaMante > t2.FECHA)
    	   GROUP BY
    		  t1.Unidad, t1.TipoMante) k ON (m.Unidad = k.Unidad)
    			 AND (m.TipoMante = k.TipoMante)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    miércoles, 30 de noviembre de 2016 17:45