none
Query de mas relaciones RRS feed

  • Pregunta

  • Buenas tardes comunidad tengo el siguiente problema, haber si me logro explicar:

    Tengo este query:

    SELECT dbo.TabSolicitudIntegral.FolioSolicitudIntegral ,
            dbo.TabSolicitudIntegral.FechaCreacion ,
            dbo.TabDetallesSolicitudIntegral.FichaRFCEmpleado ,
            dbo.TabDetallesSolicitudIntegral.NombreEmpleado ,
            dbo.TabSolicitudIntegral.FichaAutorizador ,
            gestion_gl.dbo.M_FORMATO.FICHA ,
            MAX(gestion_gl.dbo.M_FORMATO.FOLIO) AS FOLIO
    FROM    dbo.TabSolicitudIntegral ,
            dbo.TabDetallesSolicitudIntegral ,
            gestion_gl.dbo.M_FORMATO
    WHERE   dbo.TabSolicitudIntegral.FechaCreacion >= '20170303 00:00'
            AND dbo.TabSolicitudIntegral.FechaCreacion <= '20170303 23:59'
            AND dbo.TabSolicitudIntegral.IdSolicitudIntegral = dbo.TabDetallesSolicitudIntegral.IdSolicitudIntegral
            AND gestion_gl.dbo.M_FORMATO.FICHA = dbo.TabSolicitudIntegral.FichaAutorizador
    GROUP BY dbo.TabSolicitudIntegral.FolioSolicitudIntegral ,
            dbo.TabSolicitudIntegral.FechaCreacion ,
            dbo.TabDetallesSolicitudIntegral.FichaRFCEmpleado ,
            dbo.TabDetallesSolicitudIntegral.NombreEmpleado ,
            dbo.TabSolicitudIntegral.FichaAutorizador,
            gestion_gl.dbo.M_FORMATO.FICHA
            ORDER BY dbo.TabSolicitudIntegral.FechaCreacion

    Que me presenta este resultado como se muestra en la imagen 1:

    Quiero agregarle una nueva columna a la consulta que es de la tabla :

    gestion_gl.dbo.M_FORMATO

    Y la columna se llamada

    CGESTOR

    En la siguiente imagen (imagen 2) tengo hecho un select a la tabla

    gestion_gl.dbo.M_FORMATO donde le pido que me muestre todos los datos de la ficha = 00324721

    Que como verán es el primer dato que aparece en la imagen 1 en las columnas FichaAutorizador y Ficha.

    El problema es que cuando le agrego la nueva columna a la consulta me muestra datos repetidos y solo necesito como se ve en la consulta me muestre el valor de la columna CGestor que tenga el máximo folio, como lo pongo en esta consulta.

    SELECT dbo.TabSolicitudIntegral.FolioSolicitudIntegral ,
            dbo.TabSolicitudIntegral.FechaCreacion ,
            dbo.TabDetallesSolicitudIntegral.FichaRFCEmpleado ,
            dbo.TabDetallesSolicitudIntegral.NombreEmpleado ,
            dbo.TabSolicitudIntegral.FichaAutorizador ,
            gestion_gl.dbo.M_FORMATO.FICHA ,
            MAX(gestion_gl.dbo.M_FORMATO.FOLIO) AS FOLIO,
            gestion_gl.dbo.M_FORMATO.CGESTOR
    FROM    dbo.TabSolicitudIntegral ,
            dbo.TabDetallesSolicitudIntegral ,
            gestion_gl.dbo.M_FORMATO
    WHERE   dbo.TabSolicitudIntegral.FechaCreacion >= '20170303 00:00'
            AND dbo.TabSolicitudIntegral.FechaCreacion <= '20170303 23:59'
            AND dbo.TabSolicitudIntegral.IdSolicitudIntegral = dbo.TabDetallesSolicitudIntegral.IdSolicitudIntegral
            AND gestion_gl.dbo.M_FORMATO.FICHA = dbo.TabSolicitudIntegral.FichaAutorizador
    GROUP BY dbo.TabSolicitudIntegral.FolioSolicitudIntegral ,
            dbo.TabSolicitudIntegral.FechaCreacion ,
            dbo.TabDetallesSolicitudIntegral.FichaRFCEmpleado ,
            dbo.TabDetallesSolicitudIntegral.NombreEmpleado ,
            dbo.TabSolicitudIntegral.FichaAutorizador,
            gestion_gl.dbo.M_FORMATO.FICHA,
            gestion_gl.dbo.M_FORMATO.CGESTOR
            ORDER BY dbo.TabSolicitudIntegral.FechaCreacion

    Como ven solo le agrege la columna gestion_gl.dbo.M_FORMATO.CGESTOR en el query y me muestra lo que se ve en la imagen 3

    Solo me tendría que mostrar el un solo me debe mostrarlos la línea del máximo valor de la columna Folio de una sola ficha.

    Espero haberme explicado y  gracias por su ayuda.

    lunes, 6 de marzo de 2017 20:23

Respuestas

  • Gracias, lo solucione de esta forma:

    SELECT DISTINCT
                dbo.TabSolicitudIntegral.FolioSolicitudIntegral ,
                dbo.TabSolicitudIntegral.FechaCreacion ,
                dbo.TabDetallesSolicitudIntegral.FichaRFCEmpleado ,
                dbo.TabDetallesSolicitudIntegral.NombreEmpleado ,
                dbo.TabSolicitudIntegral.FichaAutorizador ,
                gestion_gl.dbo.M_FORMATO.FICHA ,
                gestion_gl.dbo.M_FORMATO.FOLIO ,
                gestion_gl.dbo.M_FORMATO.CGESTOR,
                dbo.TabDetallesSolicitudIntegral.IdSolicitudIntegral
       FROM     dbo.TabSolicitudIntegral
                INNER JOIN dbo.TabDetallesSolicitudIntegral ON dbo.TabSolicitudIntegral.IdSolicitudIntegral = dbo.TabDetallesSolicitudIntegral.IdSolicitudIntegral
                                                               AND dbo.TabSolicitudIntegral.FechaCreacion >= '20170303 00:00'

                                                               AND dbo.TabSolicitudIntegral.FechaCreacion <= '20170303 23:59'

                INNER JOIN ( SELECT gestion_gl.dbo.M_FORMATO.FICHA ,
                                    MAX(gestion_gl.dbo.M_FORMATO.FOLIO) AS MaxFOLIO
                             FROM   gestion_gl.dbo.M_FORMATO
                             GROUP BY gestion_gl.dbo.M_FORMATO.FICHA
                           ) AS MaximasFichasFolio ON dbo.TabSolicitudIntegral.FichaAutorizador = MaximasFichasFolio.FICHA
                INNER JOIN gestion_gl.dbo.M_FORMATO ON gestion_gl.dbo.M_FORMATO.FICHA = MaximasFichasFolio.FICHA
                                                       AND gestion_gl.dbo.M_FORMATO.FOLIO = MaximasFichasFolio.MaxFOLIO
       ORDER BY dbo.TabSolicitudIntegral.FechaCreacion

    De todos modos, muchas gracias, por tu apoyo.

    • Marcado como respuesta E_A_S_S martes, 7 de marzo de 2017 16:05
    martes, 7 de marzo de 2017 16:05

Todas las respuestas

  • la verdad es que la explicación es larga, pero no se si te entendí. el tema básicamentes  que al agregar en el group by gestión_gl.dbo.mformato.cgestor estás haciendo que te aparezcan duplicados. quizá quitando eso de  group by y poinendo un max(xxxxx.cgestor) salga lo que tu buscas. Si por el contrario quieres ver todos los gestores podemos darle una vuelta y hacer una subselect que agrege los nombres.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 7 de marzo de 2017 7:20
    Moderador
  • Buenos días, gracias por responder.

    Lo que necesito hacer es que el query me presente el datos de la columna CGestor correspondiente al max(folio) y no que me presente todos, solamente un cgestor, espero haberme explicado.

    Gracias.

    martes, 7 de marzo de 2017 14:29
  • Prueba así

    SELECT dbo.TabSolicitudIntegral.FolioSolicitudIntegral ,
            dbo.TabSolicitudIntegral.FechaCreacion ,
            dbo.TabDetallesSolicitudIntegral.FichaRFCEmpleado ,
            dbo.TabDetallesSolicitudIntegral.NombreEmpleado ,
            dbo.TabSolicitudIntegral.FichaAutorizador ,
            gestion_gl.dbo.M_FORMATO.FICHA ,
            left(MAX(cast(gestion_gl.dbo.M_FORMATO.FOLIO as char(25)+ cast(gestion_gl.dbo.M_FORMATO.CGESTOR as char(25))),25) AS FOLIO,
    	   right(MAX(cast(gestion_gl.dbo.M_FORMATO.FOLIO as char(25)+ cast(gestion_gl.dbo.M_FORMATO.CGESTOR as char(25))),15) as gestor
            
    FROM    dbo.TabSolicitudIntegral ,
            dbo.TabDetallesSolicitudIntegral ,
            gestion_gl.dbo.M_FORMATO
    WHERE   dbo.TabSolicitudIntegral.FechaCreacion >= '20170303 00:00'
            AND dbo.TabSolicitudIntegral.FechaCreacion <= '20170303 23:59'
            AND dbo.TabSolicitudIntegral.IdSolicitudIntegral = dbo.TabDetallesSolicitudIntegral.IdSolicitudIntegral
            AND gestion_gl.dbo.M_FORMATO.FICHA = dbo.TabSolicitudIntegral.FichaAutorizador
    GROUP BY dbo.TabSolicitudIntegral.FolioSolicitudIntegral ,
            dbo.TabSolicitudIntegral.FechaCreacion ,
            dbo.TabDetallesSolicitudIntegral.FichaRFCEmpleado ,
            dbo.TabDetallesSolicitudIntegral.NombreEmpleado ,
            dbo.TabSolicitudIntegral.FichaAutorizador,
            gestion_gl.dbo.M_FORMATO.FICHA
            
            ORDER BY dbo.TabSolicitudIntegral.FechaCreacion


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 7 de marzo de 2017 15:33
    Moderador
  • Gracias, lo solucione de esta forma:

    SELECT DISTINCT
                dbo.TabSolicitudIntegral.FolioSolicitudIntegral ,
                dbo.TabSolicitudIntegral.FechaCreacion ,
                dbo.TabDetallesSolicitudIntegral.FichaRFCEmpleado ,
                dbo.TabDetallesSolicitudIntegral.NombreEmpleado ,
                dbo.TabSolicitudIntegral.FichaAutorizador ,
                gestion_gl.dbo.M_FORMATO.FICHA ,
                gestion_gl.dbo.M_FORMATO.FOLIO ,
                gestion_gl.dbo.M_FORMATO.CGESTOR,
                dbo.TabDetallesSolicitudIntegral.IdSolicitudIntegral
       FROM     dbo.TabSolicitudIntegral
                INNER JOIN dbo.TabDetallesSolicitudIntegral ON dbo.TabSolicitudIntegral.IdSolicitudIntegral = dbo.TabDetallesSolicitudIntegral.IdSolicitudIntegral
                                                               AND dbo.TabSolicitudIntegral.FechaCreacion >= '20170303 00:00'

                                                               AND dbo.TabSolicitudIntegral.FechaCreacion <= '20170303 23:59'

                INNER JOIN ( SELECT gestion_gl.dbo.M_FORMATO.FICHA ,
                                    MAX(gestion_gl.dbo.M_FORMATO.FOLIO) AS MaxFOLIO
                             FROM   gestion_gl.dbo.M_FORMATO
                             GROUP BY gestion_gl.dbo.M_FORMATO.FICHA
                           ) AS MaximasFichasFolio ON dbo.TabSolicitudIntegral.FichaAutorizador = MaximasFichasFolio.FICHA
                INNER JOIN gestion_gl.dbo.M_FORMATO ON gestion_gl.dbo.M_FORMATO.FICHA = MaximasFichasFolio.FICHA
                                                       AND gestion_gl.dbo.M_FORMATO.FOLIO = MaximasFichasFolio.MaxFOLIO
       ORDER BY dbo.TabSolicitudIntegral.FechaCreacion

    De todos modos, muchas gracias, por tu apoyo.

    • Marcado como respuesta E_A_S_S martes, 7 de marzo de 2017 16:05
    martes, 7 de marzo de 2017 16:05