Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-11-2008
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 12-11-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 24
enecumene Va por buen camino
Te pregunto, ¿quieres sumar los registros entre las dos tablas?.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 12-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 24
Caro Va por buen camino
Cita:
Empezado por mjjj Ver Mensaje
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 12-11-2008
Avatar de Ferrari
Ferrari Ferrari is offline
Miembro
 
Registrado: jun 2006
Ubicación: Torreón, México
Posts: 154
Poder: 20
Ferrari Va por buen camino
Cool

Caro mas Rapida que un Ferrari me has ganado la respuesta...estoy de acuerdo contigo
Responder Con Cita
  #5  
Antiguo 12-11-2008
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 12-11-2008
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 13-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 24
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 13-11-2008
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 13-11-2008
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
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)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:55:20.


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
Copyright 1996-2007 Club Delphi