none
Consulta compleja SQL RRS feed

  • Pregunta

  • hola buen día. Estoy trabajando con una consulta algo compleja, de modo que me envíe información relacionada a las comisiones en base a determinada fecha, ya logre me de la información, pero la estructura de como me lo presenta me gustaría cambiarla pero no se como me de esa información:

    Estas son las tablas que tengo, los datos que obtengo y como deseo obtenerlo, en la parte de como deseo obtenerlo agrupado por vendedor es donde ya no se como aplicarlo:

    Mi consulta es:

    SELECT f.CVE_VEND, f.cve_doc,f.cve_clpv,f.fecha_doc,f.can_tot as Subtotal,f.com_tot as Comision_Total,f.IMPORTE as Total,
    (f.IMPORTE-(SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A')) as Diferencia,
    (SELECT max(fecha_apli) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A') as Fecha_Ult_Pago,
    (SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A') as Abono_Total
    FROM FACTF01 f where f.FECHA_DOC >='12/01/2014' and f.FECHA_DOC<='12/31/2014'and
    (SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A')>0.1
     order by f.CVE_DOC; 

    Esta consulta me da lo que tengo en la imagen marcado como RESULTADO DE CONSULTA, PEO LO QUE YA NO SE COMO HACER ES TENERLO A COMO SE MUESTRA EN RESULTADO DESEADO.ESTE REPORTE LO CONSTRUIRE EN C#, DE MODO QUE CUANDO LE DEN LOS 2 RANGOS DE FECHAS Y DAR CLIC EN UN BOTON DE CONSULTAR, LE MANDE LA INFORMACIÓN EN UN ARCHIVO DE EXCEL.

    ESPERO ME PUEDAN APOYAR, GRACIAS POR SU VALIOSA AYUDA.

    martes, 27 de enero de 2015 23:07

Respuestas

  • Hola Elena,

    Intenta con la consulta que te adjunto. Coméntanos como te fue.

    SELECT 
    	f.CVE_VEND, 
    	f.cve_doc,
    	max(f.cve_clpv),
    	max(f.fecha_doc),
    	max(f.can_tot) as Subtotal,
    	max(f.com_tot) as Comision_Total,
    	max(f.IMPORTE) as Total,
    	(max(f.IMPORTE)-(SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A')) as Diferencia,
    	(SELECT max(fecha_apli) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A') as Fecha_Ult_Pago,
    	(SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A') as Abono_Total
    FROM 
    	FACTF01 f 
    where 
    	f.FECHA_DOC >='12/01/2014' and f.FECHA_DOC<='12/31/2014'
    	and	(SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A')>0.1
    GROUP BY
    	f.CVE_VEND,
    	f.CVE_DOC
    order by 
    	f.CVE_VEND,
    	f.CVE_DOC;

    Aunque yo lo dejaría finalmente así

    SELECT 
    	f.CVE_VEND, 
    	f.cve_doc,
    	max(f.cve_clpv),
    	max(f.fecha_doc),
    	max(f.can_tot) as Subtotal,
    	max(f.com_tot) as Comision_Total,
    	max(f.IMPORTE) as Total,
    	max(f.IMPORTE)- sum(b.importe) as Diferencia,
    	max(b.fecha_apli) as Fecha_Ult_Pago,
    	sum(b.importe) as Abono_Total
    FROM 
    	FACTF01 f 
    	inner join CUEN_DET01 b on (b.no_factura=f.CVE_DOC) 
    		and (b.tipo_mov = 'A')
    where 
    	(f.FECHA_DOC between '20141201' and '20141231')	
    GROUP BY
    	f.CVE_VEND,
    	f.CVE_DOC
    HAVING
    	sum(b.importe) > 0.1
    order by 
    	f.CVE_VEND,
    	f.CVE_DOC;


    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.


    Willams Morales P.
    Arequipa - Perú

    • Editado Willams Morales miércoles, 28 de enero de 2015 0:08
    • Marcado como respuesta Elenita90 miércoles, 28 de enero de 2015 3:29
    miércoles, 28 de enero de 2015 0:02

Todas las respuestas

  • Hola Elena,

    Intenta con la consulta que te adjunto. Coméntanos como te fue.

    SELECT 
    	f.CVE_VEND, 
    	f.cve_doc,
    	max(f.cve_clpv),
    	max(f.fecha_doc),
    	max(f.can_tot) as Subtotal,
    	max(f.com_tot) as Comision_Total,
    	max(f.IMPORTE) as Total,
    	(max(f.IMPORTE)-(SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A')) as Diferencia,
    	(SELECT max(fecha_apli) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A') as Fecha_Ult_Pago,
    	(SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A') as Abono_Total
    FROM 
    	FACTF01 f 
    where 
    	f.FECHA_DOC >='12/01/2014' and f.FECHA_DOC<='12/31/2014'
    	and	(SELECT sum(importe) from CUEN_DET01 where no_factura=CVE_DOC and tipo_mov='A')>0.1
    GROUP BY
    	f.CVE_VEND,
    	f.CVE_DOC
    order by 
    	f.CVE_VEND,
    	f.CVE_DOC;

    Aunque yo lo dejaría finalmente así

    SELECT 
    	f.CVE_VEND, 
    	f.cve_doc,
    	max(f.cve_clpv),
    	max(f.fecha_doc),
    	max(f.can_tot) as Subtotal,
    	max(f.com_tot) as Comision_Total,
    	max(f.IMPORTE) as Total,
    	max(f.IMPORTE)- sum(b.importe) as Diferencia,
    	max(b.fecha_apli) as Fecha_Ult_Pago,
    	sum(b.importe) as Abono_Total
    FROM 
    	FACTF01 f 
    	inner join CUEN_DET01 b on (b.no_factura=f.CVE_DOC) 
    		and (b.tipo_mov = 'A')
    where 
    	(f.FECHA_DOC between '20141201' and '20141231')	
    GROUP BY
    	f.CVE_VEND,
    	f.CVE_DOC
    HAVING
    	sum(b.importe) > 0.1
    order by 
    	f.CVE_VEND,
    	f.CVE_DOC;


    Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.


    Willams Morales P.
    Arequipa - Perú

    • Editado Willams Morales miércoles, 28 de enero de 2015 0:08
    • Marcado como respuesta Elenita90 miércoles, 28 de enero de 2015 3:29
    miércoles, 28 de enero de 2015 0:02
  • Hola Williams , me ayudo mucho pero al final me da el mismo resultado. Para mayor claridad, levantaré otro hilo con mas descripción y datos mas sencillos. Gracias por tu gran y valiosa ayuda :*
    miércoles, 28 de enero de 2015 3:29