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

consulta SQL que no logro.

Estas en el tema de consulta SQL que no logro. en el foro de Bases de Datos General en Foros del Web. buenas a todos. quisiera comentar un problema que tengo, bueno no es tan problema, les comento. tengo una tabla en MySql y necesito hacer una ...
  #1 (permalink)  
Antiguo 21/01/2012, 09:27
 
Fecha de Ingreso: enero-2009
Mensajes: 16
Antigüedad: 15 años, 3 meses
Puntos: 0
Información consulta SQL que no logro.

buenas a todos.

quisiera comentar un problema que tengo, bueno no es tan problema, les comento.

tengo una tabla en MySql y necesito hacer una consulta para saber unos datos de existencia de productos. En resumen (omitiendo algunos campos para facilitar las cosas) la tabla es como sigue:

------------------------
FACTURA
------------------------
fecha *
id_producto *
tipo
cantidad
------------------------

los campos fecha y id_producto son la clave primaria de esta tabla y estos solo el nombre los explica
tipo es un campo que me indica si el producto ingreso o salio.
es decir contendria una 'E' si es una entrada del producto. y contendria una 'S' si es salida de producto.
y cantidad pues indica la cantidad que ingresa o que sale.
cuando un producto ingresa es por que se hace una compra y cuando el producto sale es por que se vende.

la cosa que quiero hacer es simplemente obtener el stock o existencias para cada producto que hay, no es mas.

en realidad ya lo hice, pero no me siento conforme con lo que hice por que tengo que hacer dos subconsultas internas para obtener la informacion.
Yo pensaria que solo con una consulta se podria pero la verdad no he sido capaz.

si alguien me puede hechar una mano

es decir necesito una salida tal como esta, no mas es hacer una resta de cantidades que entran con las cantidades que salen para un mismo producto

------------------------
EXISTENCIAS
-----------------------
PRODUCTO | CANTIDAD
REF05 | 12
REF78 | 3
REF45 | 0
------------------------------

les agradeciria si alguien me puede hechar una mano.
gracias

Última edición por sergio31rojas; 21/01/2012 a las 09:48 Razón: falto algo
  #2 (permalink)  
Antiguo 21/01/2012, 12:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consulta SQL que no logro.

Esto devuelve la suma requerida:
Código MySQL:
Ver original
  1. SELECT producto, Salida, Entrada, (Entrada -Salida) ExistenciaActual
  2.     (SELECT producto, SUM(IF(tipo = 'S', cantidad, 0) Salida, SUM(IF(tipo = 'E', cantidad, 0) Entrada
  3.     FROM factura
  4.     GROUP BY producto) T1;

Nota: Usar la misma tabla para las entradas que para las salidas muestra un pésimo diseño de base de datos, porque las entidades que representan a cada acción son distintas y ni siquiera las relaciones de esas entidades con otras son las mismas.
Las compras de mercadería para stock se relacionan con proveedores, mientras que las salidas por venta están relacionadas con los clientes. Son conceptos absolutamente diferentes y no deberían estar integrados en la misma tabla.
Por otro lado, las compras se desglosan por fechas, el valor de la compra tiene variaciones históricas, diferentes compras del mismo producto pueden realizarse a proveedores distintos, y una compra a su vez está relacionada a al menos dos tres documentos distintos (facturas, recibos y remitos), mientras que las ventas se relacionan a uno (facturas propias) o dos (facturas y remitos), pero que representan tablas diferentes.
Como ejercicio, está bien. Como proyecto real... no.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 21/01/2012 a las 12:15

Etiquetas: consulta_reflexiva, sql
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 02:34.