none
Subconsulta en columna RRS feed

  • Pregunta

  • Buenas tardes,

    Tengo una duda respecto a la siguiente consulta:

    SELECT TA.ccodigoa01,
    	SUM(CONVERT(DECIMAL(18,2), CASE TMO.cnombrem01
    	WHEN 'Peso Mexicano' THEN TM.cneto/TC.cimporte
    	WHEN 'Dólar Americano' THEN TM.cneto
    	ELSE 0 END)) AS [Ventas Febrero]
    FROM MGW10010 TM FULL OUTER JOIN
         MGW10008 TD ON TM.ciddocum01 = TD.ciddocum01 FULL OUTER JOIN
    	 MGW10005 TP ON TM.cidprodu01 = TP.cidprodu01 FULL OUTER JOIN
    	 MGW10034 TMO ON TD.cidmoneda = TMO.cidmoneda FULL OUTER JOIN
    	 MGW10035 TC ON TD.cfecha = TC.cfecha FULL OUTER JOIN
    	 MGW10001 TA ON TD.cidagente = TA.cidagente FULL OUTER JOIN
             mgw10002 TCL ON TD.cidclien01 = TCL.cidclien01
    WHERE TP.ctipopro01 =1 AND TC.cidmoneda = 2 AND TM.ciddocum02 = 1 AND MONTH(TD.cfecha) = 2 AND YEAR(TD.cfecha) = 2017
    GROUP BY TA.ccodigoa01, MONTH(TD.cfecha), YEAR(TD.cfecha)
    ORDER BY TA.ccodigoa01

    Es consulta me da como resultado la siguiente tabla:

    Lo que quiero hacer es agregar a un lado de la columna Ventas Febrero, otra columna pero que muestre las ventas correspondientes a marzo, la pregunta es si ¿lo puedo realizar con una subconsulta o que debo de realizar?

    De antemano gracias.

    Saludos.

    martes, 11 de abril de 2017 22:28

Respuestas

  • Eduardo060888,


    SELECT
        TA.ccodigoa01,
        SUM(CASE WHEN MONTH(TD.cfecha) = 2 THEN 	   
                                CASE TMO.cnombrem01
    						  WHEN 'Peso Mexicano' THEN TM.cneto / TC.cimporte
                                    WHEN 'Dólar Americano' THEN TM.cneto
                                    ELSE 0
                                END
        END) AS [Ventas Febrero],
        SUM(CASE WHEN MONTH(TD.cfecha) = 3 THEN 	   
                                CASE TMO.cnombrem01
    						  WHEN 'Peso Mexicano' THEN TM.cneto / TC.cimporte
                                    WHEN 'Dólar Americano' THEN TM.cneto
                                    ELSE 0
                                END
        END) AS [Ventas Marzo]
    FROM 
        MGW10010 TM
        FULL OUTER JOIN MGW10008 TD ON TM.ciddocum01 = TD.ciddocum01
        FULL OUTER JOIN MGW10005 TP ON TM.cidprodu01 = TP.cidprodu01
        FULL OUTER JOIN MGW10034 TMO ON TD.cidmoneda = TMO.cidmoneda
        FULL OUTER JOIN MGW10035 TC ON TD.cfecha = TC.cfecha
        FULL OUTER JOIN MGW10001 TA ON TD.cidagente = TA.cidagente
        FULL OUTER JOIN mgw10002 TCL ON TD.cidclien01 = TCL.cidclien01
    WHERE
        TP.ctipopro01 = 1 AND TC.cidmoneda = 2 
        AND YEAR(TD.cfecha) = 2017 AND MONTH(TD.cfecha) IN (2, 3)
    GROUP BY 
        TA.ccodigoa01;
    GO



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Propuesto como respuesta HunchbackMVP miércoles, 12 de abril de 2017 12:59
    • Marcado como respuesta Joyce_ACModerator martes, 18 de abril de 2017 13:59
    martes, 11 de abril de 2017 22:39

Todas las respuestas

  • Eduardo060888,


    SELECT
        TA.ccodigoa01,
        SUM(CASE WHEN MONTH(TD.cfecha) = 2 THEN 	   
                                CASE TMO.cnombrem01
    						  WHEN 'Peso Mexicano' THEN TM.cneto / TC.cimporte
                                    WHEN 'Dólar Americano' THEN TM.cneto
                                    ELSE 0
                                END
        END) AS [Ventas Febrero],
        SUM(CASE WHEN MONTH(TD.cfecha) = 3 THEN 	   
                                CASE TMO.cnombrem01
    						  WHEN 'Peso Mexicano' THEN TM.cneto / TC.cimporte
                                    WHEN 'Dólar Americano' THEN TM.cneto
                                    ELSE 0
                                END
        END) AS [Ventas Marzo]
    FROM 
        MGW10010 TM
        FULL OUTER JOIN MGW10008 TD ON TM.ciddocum01 = TD.ciddocum01
        FULL OUTER JOIN MGW10005 TP ON TM.cidprodu01 = TP.cidprodu01
        FULL OUTER JOIN MGW10034 TMO ON TD.cidmoneda = TMO.cidmoneda
        FULL OUTER JOIN MGW10035 TC ON TD.cfecha = TC.cfecha
        FULL OUTER JOIN MGW10001 TA ON TD.cidagente = TA.cidagente
        FULL OUTER JOIN mgw10002 TCL ON TD.cidclien01 = TCL.cidclien01
    WHERE
        TP.ctipopro01 = 1 AND TC.cidmoneda = 2 
        AND YEAR(TD.cfecha) = 2017 AND MONTH(TD.cfecha) IN (2, 3)
    GROUP BY 
        TA.ccodigoa01;
    GO



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Propuesto como respuesta HunchbackMVP miércoles, 12 de abril de 2017 12:59
    • Marcado como respuesta Joyce_ACModerator martes, 18 de abril de 2017 13:59
    martes, 11 de abril de 2017 22:39
  • En ese caso filtra para ambos meses y desplegas los valores usando una expresion CASE dentro de la funcion de agregacion, tal como sugirio Willams.

    Te recomiendo que no manipules la fecha en el filtro (usar funciones como MONTH, YEAR, etc.) para en caso de existir algun indice por esa columna que el optimizador pueda usarlo para estimar cardinalidad.

    SELECT
        TA.ccodigoa01,
        SUM(CASE WHEN TD.cfecha >= '20170201' AND TD.cfecha < '20170301' THEN 	   
                                CASE TMO.cnombrem01
    						  WHEN 'Peso Mexicano' THEN TM.cneto / TC.cimporte
                                    WHEN 'Dólar Americano' THEN TM.cneto
                                    ELSE 0
                                END
        END) AS [Ventas Febrero],
        SUM(CASE WHEN TD.cfecha >= '20170301' AND TD.cfecha < '20170401' THEN 	   
                                CASE TMO.cnombrem01
    						  WHEN 'Peso Mexicano' THEN TM.cneto / TC.cimporte
                                    WHEN 'Dólar Americano' THEN TM.cneto
                                    ELSE 0
                                END
        END) AS [Ventas Marzo]
    FROM 
        MGW10010 TM
        FULL OUTER JOIN MGW10008 TD ON TM.ciddocum01 = TD.ciddocum01
        FULL OUTER JOIN MGW10005 TP ON TM.cidprodu01 = TP.cidprodu01
        FULL OUTER JOIN MGW10034 TMO ON TD.cidmoneda = TMO.cidmoneda
        FULL OUTER JOIN MGW10035 TC ON TD.cfecha = TC.cfecha
        FULL OUTER JOIN MGW10001 TA ON TD.cidagente = TA.cidagente
        FULL OUTER JOIN mgw10002 TCL ON TD.cidclien01 = TCL.cidclien01
    WHERE
        TP.ctipopro01 = 1 AND TC.cidmoneda = 2 
        AND TD.cfecha >= '20170201' AND TD.cfecha < '20170401'
    GROUP BY 
        TA.ccodigoa01;
    GO


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    miércoles, 12 de abril de 2017 12:59