Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sum SQL (https://www.clubdelphi.com/foros/showthread.php?t=61541)

mjjj 11-11-2008 23:49:36

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.

Código SQL [-]
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.

Caro 12-11-2008 00:57:52

Cita:

Empezado por mjjj (Mensaje 325425)
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).

Código:

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.

Código SQL [-]
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;)

mjjj 12-11-2008 13:42:32

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

Código SQL [-]
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

mjjj 12-11-2008 20:37:44

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.

Código SQL [-]
select sum(i.cantidad) as INGfrom INGRESO IUNIONselect sum(e.cantidad) as EGRfrom egreso e

Espero me puedan ayudar.... gracias

Caro 13-11-2008 00:41:24

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).

Código SQL [-]
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

mjjj 13-11-2008 01:10:06

Muchas gracias Caro, pero ocurrio otro hecho.
Utilice este codigo

Código SQL [-]
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

mjjj 13-11-2008 17:43:37

Finalmente pude solucionar mi problema con el siguiente codigo:

Código SQL [-]
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)


La franja horaria es GMT +2. Ahora son las 17:31:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi