Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

doble sumatoria en una consulta

Estas en el tema de doble sumatoria en una consulta en el foro de Mysql en Foros del Web. Hola a todos, estoy tratando de hacer un select pero no doy con el chiste...Necesito mostrar el total de las deudas que se tienen Hasta ...
  #1 (permalink)  
Antiguo 28/09/2011, 18:43
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
doble sumatoria en una consulta

Hola a todos, estoy tratando de hacer un select pero no doy con el chiste...Necesito mostrar el total de las deudas que se tienen

Hasta el momento he podido mostrar el total de las deudas que se tienen pero con cada proveedor
Las tablas son:

Código SQL:
Ver original
  1. CREATE TABLE ARTICULO  (
  2.    COD_ART              CHAR(10)                        NOT NULL,
  3.    COD_TIP_ART          INTEGER                         NOT NULL,
  4.    COD_UNI_MED          INTEGER                         NOT NULL,
  5.    DES_ART              VARCHAR2(100),
  6.    SAL_EXI_ART          NUMBER(6),
  7.    EXI_MIN_ART          NUMBER(6),
  8.    VAL_COM              NUMBER(9,2),
  9.    VAL_VEN              NUMBER(9,2),
  10.    CONSTRAINT PK_ARTICULO PRIMARY KEY (COD_ART)
  11. );
Código SQL:
Ver original
  1. CREATE TABLE COMPRA  (
  2.    COD_COM              INTEGER                         NOT NULL,
  3.    NIT_PRO              CHAR(12)                        NOT NULL,
  4.    TIP_COM              CHAR(2),
  5.    FEC_COM              DATE,
  6. CONSTRAINT COMPRA_TIP_COM_CK CHECK (TIP_COM IN ('CO','co','cr','CR')),
  7.    CONSTRAINT PK_COMPRA PRIMARY KEY (COD_COM)
  8. );

Código SQL:
Ver original
  1. CREATE TABLE DETALLE_COMPRA  (
  2.    COD_COM              INTEGER                         NOT NULL,
  3.    ITE_COM              INTEGER                         NOT NULL,
  4.    COD_ART              CHAR(10)                        NOT NULL,
  5.    CAN_ART              INTEGER,
  6.    CONSTRAINT PK_DETALLE_COMPRA PRIMARY KEY (COD_COM, ITE_COM)
  7. );

Código SQL:
Ver original
  1. CREATE TABLE PROVEEDOR  (
  2.    NIT_PRO              CHAR(12)                        NOT NULL,
  3.    COD_MUN              INTEGER                         NOT NULL,
  4.    RAZ_SOC_PRO          VARCHAR2(100),
  5.    DIR_PRO              VARCHAR2(150),
  6.    REP_LEG_PRO          CHAR(80),
  7.    EMA_PRO              VARCHAR2(150),
  8.    CONSTRAINT PK_PROVEEDOR PRIMARY KEY (NIT_PRO)
  9. );

tengo una consulta que me muestra el total en deudas que se tienen con cada proveedor, ahora lo que necesito es sumar todos esos totales...lo podria hacer en la misma consulta?..o como lo haria?

Código SQL:
Ver original
  1. SELECT a.cod_com, a.nit_pro, fec_com,
  2. raz_soc_pro, SUM(c.can_art*val_ven) AS total
  3. FROM compra a INNER JOIN proveedor b
  4. ON a.nit_pro = b.nit_pro
  5. INNER JOIN detalle_compra c
  6.  ON c.cod_com = a.cod_com
  7. INNER JOIN articulo d
  8. ON d.cod_art = c.cod_art WHERE a.tip_com='CR'
  9. GROUP BY a.cod_com, a.nit_pro, fec_com,raz_soc_pro
  10. ORDER BY 1;
  #2 (permalink)  
Antiguo 29/09/2011, 06:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
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.

Etiquetas: doble, select, sumatoria, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:49.