Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/09/2011, 06:43
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: doble sumatoria en una consulta

Código MySQL:
Ver original
  1.              a.cod_com as Compra,
  2.              a.nit_pro as IdProveedor,
  3.              fec_com as FechaCompra,
  4.              raz_soc_pro as Razon,
  5.              sum(c.can_art*d.val_ven) AS total
  6. FROM compra a
  7.               INNER JOIN proveedor b
  8.                        ON a.nit_pro = b.nit_pro
  9.               INNER JOIN detalle_compra c
  10.                        ON c.cod_com = a.cod_com
  11.               INNER JOIN articulo d
  12.                        ON d.cod_art = c.cod_art
  13. WHERE a.tip_com='CR'
  14. GROUP BY a.cod_com,
  15.                  a.nit_pro,
  16.                  fec_com,
  17.                  raz_soc_pro;

Tu query no da el total por proveedor ... si no el total por cada a.cod_com, a.nit_pro, fec_com, raz_soc_pro. Es decir el total por cada Compra.

Si quieres el total por proveedor debes hacer esto

Código MySQL:
Ver original
  1. SELECT  "Total Proveedor" as  as Compra,
  2.              a.nit_pro as IdProveedor,
  3.              "Todas" as FechaCompra,
  4.              raz_soc_pro as Razon,
  5.              sum(c.can_art*d.val_ven) AS total
  6. FROM compra a
  7.               INNER JOIN proveedor b
  8.                        ON a.nit_pro = b.nit_pro
  9.               INNER JOIN detalle_compra c
  10.                        ON c.cod_com = a.cod_com
  11.               INNER JOIN articulo d
  12.                        ON d.cod_art = c.cod_art
  13. WHERE a.tip_com='CR'
  14. GROUP BY a.nit_pro,
  15.                  raz_soc_pro;

Y si quieres el total total

Código MySQL:
Ver original
  1. SELECT  "Total" as  Compra,
  2.               "Total" as  IdProveedor,
  3.              "Todas" as FechaCompra,
  4.               "Total" as  Razon,
  5.              sum(c.can_art*d.val_ven) AS total
  6. FROM  detalle_compra c
  7.                INNER JOIN articulo d
  8.                        ON d.cod_art = c.cod_art
  9. WHERE a.tip_com='CR';


Para juntar las tres querys puedes usar UNION ALL completando los campos con valores fijos como ya he hecho, puesto que TODAS la querys de un UNION deben tener el mismo numero de campos y en el mismo orden.

El problema lo tendras para ordenar ese UNION de manera que los subtotales te queden por debajo de los detalles.... aun que lo consigas sera muy ineficiente puesto que estas consultando los mismos datos tres veces....

Lo mas eficiente a mi entender seria que al mismo tiempo que tratas la primera query para listarla (php o lo que sea) obtengas los subtotales y los intercales al mostrar la lista.... Para hacer esto peregunta en el foro del lenguaje que uses... alli sabran mas que yo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.