Ver la Versión Completa : Sum SQL
Hola, ocurre algo que no se como explicarlo
Ocurre asi:
Tengo 2 tablas, ingresos y egresos, cada uno con los campos ID y cantidad.
Estos son los registros.
Ingresos
ID Cantidad
3 3
3 8
Egresos
ID Cantidad
3 4
3 5
Realizo la siguiente consulta.
select sum(i.cantidad) as ING, sum(e.cantidad) as EGR
from INGRESO I, egreso e
where i.id =e.id
Como resultado me arroja lo siguiente.
ING EGR
22 18
Porque pasara esto, como lo puedo solucionar?
Gracias, Saludos
enecumene
12-11-2008, 00:11:17
Te pregunto, ¿quieres sumar los registros entre las dos tablas?.
Saludos.
Como resultado me arroja lo siguiente.
ING EGR
22 18
Porque pasara esto, como lo puedo solucionar?
Es porque estas haciendo join entre las 2 tablas, el join te da este resultado(es un producto cartesiano).
ID ING ID EGR
3 3 3 4
3 3 3 5
3 8 3 4
3 8 3 5
con el sum de ambas columnas, el resultado que te sale es correcto.
Tienes que hacer el sum por tabla y si quieres tenerlas juntas, puedes utilizar Union.
select sum(i.cantidad) as ING
from INGRESO I
UNION
select sum(e.cantidad) as EGR
from egreso e
Saluditos
Ferrari
12-11-2008, 02:47:31
Caro mas Rapida que un Ferrari me has ganado la respuesta...estoy de acuerdo contigo;)
No me quedo muy claro, voy hacer mas compleja mi pregunta.
Estoi desarrollando una plicacion de inventario, en donde el costo es un promedio ponderado, de todas las compras que se hicieron de algun producto en particular.
Esto lo enfrente con 3 tablas: Ingresos, Egresos, Inventario
select DISTINCT M.DESCRIPCION, (sum(I.CANTIDAD) - sum(E.CANTIDAD)) AS CANTIDAD,
SUM(I.PRECIO * I.TC * I.CANTIDAD - E.PRECIO * E.TC * E.CANTIDAD)/SUM(I.CANTIDAD - E.CANTIDAD) AS PRECIO
from INGRESO I, EGRESO E, INVENTARIO M
WHERE M.ID = I.ID AND E.ID = I.ID
GROUP BY M.DESCRIPCION
el codigo anterior me funciona bien, solo cuando hay una solo ingreso y/o una solo egreso.
Alguien me puede ayudar un poco con esto... mejorando el codigo SQL, o alguna idea mejor en cuanto a tablas y estructura de base de dato.
La tabla inventario contiene la descripcion del insumo y el codigo: ID y descripcion
Espero me puedan ayudar... gracias
Voy a tratar de simplificar mi pregunta...
Este codigo SQL me sirve, pero me entrega los datos que necesito como si fueran 2 registros, lo que yo necesito es que me lo entregue en dos columnas distintas.
select sum(i.cantidad) as INGfrom INGRESO IUNIONselect sum(e.cantidad) as EGRfrom egreso e
Espero me puedan ayudar.... gracias
Hola de nuevo mjjj, te pongo un ejemplo considerando las 3 tablas que tienes y mostrando en el Select la descripcion de tu tabla inventario y el sum de ambas tablas (ingresos, egresos).
SELECT M.descripcion,
(SELECT sum(cantidad) FROM ingreso I WHERE I.id=M.id) AS ingr,
(SELECT sum(cantidad) FROM egresos E WHERE E.id=M.id) AS egre
FROM inventario M
Saluditos
Muchas gracias Caro, pero ocurrio otro hecho.
Utilice este codigo
SELECT M.descripcion,
(SELECT sum(cantidad) FROM ingreso I WHERE I.id=M.id)- (SELECT sum(cantidad) FROM egreso E WHERE E.id=M.id) AS SALDO,
FROM inventario M
El problema es que es una aplicacion para gestionar inventario, y como puede llegar a ocurrir, puede que solo hayan ingresos y ningun egreso.
Dado esto (que exista ingreso y no egreso), me aparece la descripcion del insumo, pero no el saldo.
Ejemplo: ingreso 12 y egresos (no hay registro), porque si la cantidad fuera 0, si que funciona.
No se si me pude explicar bien, bueno, espero que me puedan ayudar.
Muchas gracias a todos
Finalmente pude solucionar mi problema con el siguiente codigo:
SELECT M.nom_insum,
(SELECT coalesce(sum(cantidad),0) FROM inventario I WHERE I.id=M.cod_insum and tipo ='I')-
(SELECT coalesce(sum(cantidad),0) FROM inventario i WHERE I.id=M.cod_insum and tipo ='E') AS SALDO,
((SELECT coalesce(sum(cantidad * precio),0) FROM inventario I WHERE I.id=M.cod_insum and tipo ='I')-
(SELECT coalesce(sum(cantidad * precio),0) FROM inventario I WHERE I.id=M.cod_insum and tipo ='E'))/
coalesce((SELECT sum(cantidad) FROM inventario I WHERE I.id=M.cod_insum and tipo ='I')-
(SELECT COALESCE(sum(cantidad),0) FROM inventario i WHERE I.id=M.cod_insum and tipo ='E'),1) as precio
FROM insumos M
Ocupe 2 tablas, una con el detalle de los insumos y la otra con el movimiento de estos. (ingresos y egresos)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.