MySQL - Total del mes por proveedor y parcial por factura

 
Vista:

Total del mes por proveedor y parcial por factura

Publicado por Antonio (2 intervenciones) el 09/04/2019 14:36:52
Buenos días necesitaría hacer un query de movimientos de proveedores que me muestre lo siguiente:

Proveedor Fecha Comprobante Parcial por comprobante Total del mes

XXX1 09/03/2019 0001000000001 1000 6000
XXX1 10/03/2019 0001000000002 2000 6000
XXX1 11/03/2019 0001000000003 3000 6000
XXX2 12/03/2019 0001000000004 4000 15000
XXX2 13/03/2019 0001000000005 5000 15000
XXX2 14/03/2019 0001000000006 6000 15000

La tabla de cuenta corriente de compras tiene los siguientes campos:

proveedor
comp
fecha
importe

intenté con

SELECT proveedor,fecha,comp,importe,sum(importe) AS TotMes FROM tabla_cta_cte_proveedor WHERE fecha BETWEEN '2019-03-01' AND '2019-03-31' GROUP BY proveedor,comp

pero eso me arroja el mismo importe tanto en el total del mes como en el parcial por comprobante.

NOTA: Las columnas no quedan alineadas con los importes, pero no veo como puedo corregir ese detalle.

Antonio
Sistemas
Resipol
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 3
Ha aumentado su posición en 23 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Total del mes por proveedor y parcial por factura

Publicado por Cristóbal (2 intervenciones) el 10/04/2019 19:30:04
No será mejor así

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
   Proveedor,
   MONTH(Fecha) as Mes,
   YEAR(Fecha) as Ano,
   Comp,
   SUM(Importe) as TotMes
 
FROM
   tabla_cta_cte_proveedor
   WHERE
   fecha BETWEEN '2019-03-01' AND '2019-03-31'
 
GROUP BY
   proveedor,
   MONTH(Fecha),
   YEAR(Fecha),
   comp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 69
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Total del mes por proveedor y parcial por factura

Publicado por Vega (30 intervenciones) el 10/04/2019 20:03:41
Hola Antonio:

Le ayudé a alguien ayer con una cuestión similar. En tu caso, la solución es usar la función OVER() en conjunción con SUM().

así podrás ver el valor de cada pedido junto con el sumatorio de todos los comprobantes particionando por proveedor. Ordena por fecha si tú motor te obliga a incluir ORDER BY si usas PARTION BY con over. MySQL creo recordar que no obliga con esta última condición.

Por ejemplo:
1
2
3
SELECT proveedor,fecha,comp,importe,sum(importe) OVER (partition by proveedor order by fecha ASC )
AS Tot_Mes
 FROM tabla_cta_cte_proveedor WHERE fecha BETWEEN '2019-03-01' AND '2019-03-31' GROUP BY proveedor,comp, importe, fecha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 69
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Total del mes por proveedor y parcial por factura

Publicado por Vega (30 intervenciones) el 10/04/2019 21:52:52
con un ejemplo más concretoÑ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set dateformat DMY
 
;with tabla_cta_cte_proveedor as (
select Proveedor = cast(null as varchar(255))
, Fecha = cast(null as date)
, comp = cast(null as varchar(255))
, importe = cast(null as money)
union
select 'XXX1','09/03/2019','0001000000001',1000 union
select 'XXX1','10/03/2019','0001000000002',2000 union
select 'XXX1','11/03/2019','0001000000003',3000 union
select 'XXX2','12/03/2019','0001000000004',4000 union
select 'XXX2','13/03/2019','0001000000005',5000 union
select 'XXX2','14/03/2019','0001000000006',6000  )
SELECT proveedor,fecha,comp,importe ,sum(importe) over (partition by Proveedor) AS TotMes
FROM tabla_cta_cte_proveedor
WHERE fecha BETWEEN '2019-03-01' AND '2019-03-31'
GROUP BY proveedor,comp, fecha, importe
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 3 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Total del mes por proveedor y parcial por factura

Publicado por Antonio (2 intervenciones) el 11/04/2019 01:43:29
El tema con over es que funciona con la versión 8 de mysql y tengo instalada una versión más vueja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 69
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Total del mes por proveedor y parcial por factura

Publicado por Vega (30 intervenciones) el 11/04/2019 01:55:27
Entonces más fácil pués! con un JOIN !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set dateformat DMY
 
;with tabla_cta_cte_proveedor as (
select Proveedor = cast(null as varchar(255))
, Fecha = cast(null as date)
, comp = cast(null as varchar(255))
, importe = cast(null as money)
union
select 'XXX1','09/03/2019','0001000000001',1000 union
select 'XXX1','10/03/2019','0001000000002',2000 union
select 'XXX1','11/03/2019','0001000000003',3000 union
select 'XXX2','12/03/2019','0001000000004',4000 union
select 'XXX2','13/03/2019','0001000000005',5000 union
select 'XXX2','14/03/2019','0001000000006',6000  )
SELECT p.proveedor,fecha,comp,importe, TOTAL.TotMes
FROM tabla_cta_cte_proveedor P
LEFT JOIN (SELECT PROVEEDOR, TotMes = SUM(IMPORTE) FROM tabla_cta_cte_proveedor GROUP BY Proveedor) TOTAL ON P.Proveedor = TOTAL.Proveedor
WHERE fecha BETWEEN '2019-03-01' AND '2019-03-31'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 3 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Total del mes por proveedor y parcial por factura

Publicado por Antonio (2 intervenciones) el 11/04/2019 17:22:36
Le hice algunos ajustes al query que pusiste y anduvo perfecto. Después me di cuenta de que no era exactamente lo que buscaba, pero eso lo voy a poner en otro post. Lo importante es que lo que originalmente pregunté tuvo solución. Muchas Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar