SQL - Restar dos campos de dos tablas

   
Vista:

Restar dos campos de dos tablas

Publicado por gustavo sanchis belda (5 intervenciones) el 10/09/2010 20:47:24
Hola!!

Tengo un problemilla en una base de datos que estoy creando.

La base de datos es para controlar el stock que hay en un almacen de camisetas.
He creado tres tablas que tienen los siguientes campos:

PRODUCTOS: Referencia, marca, descripcion.
ENTRADAS: Id_E, Referencia, fecha, color, talla, cantidad_E
SALIDAS: Id_S, Referencia, fecha, color, talla, cantidad_S

Van enlazadas por la referencia. En la tabla productos, la referencia es la llave primaria, en las entradas y las salidas he puesto como llave primaria un id, ya que asi me dejara repetir varias entradas o salidas de una misma referencia.

Cada referencia, va a tener, 4 tallas y 8 colores, esto puede variar.

En primer lugar hago consultas para saber el total de las entradas y me las suma perfectamente, al igual me pasa en las salidas.

El problema lo tengo cuando quiero hacer la consulta para saber el stock que tengo, es decir, la consulta que quiero hacer es que me reste la cantidad de entradas(cantidad_E) menos la cantidad de salidas(cantidad_S).

De este modo esta consulta me tendria que agrupar por tallas colores y el stock de cada referencia. Deberia quedar asi.

Referencia color talla stock
544 blanco L 10
544 blanco M 8
544 negro L 10

Espero que me ayuden, gracias!!!!!
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

RE:Restar dos campos de dos tablas

Publicado por Leonardo Josué (878 intervenciones) el 10/09/2010 21:47:14
Hola Gustavo:

No mencionas en tu post qué manejador de BD estás utilizando y en realidad tampoco mencionas cuál es el problema que tienes. Dices que ya tienes las consultas que te obtienen la sumatoria de todas las entradas y otra consulta donde obtienes la sumatoria de todas las salidas cierto??? pues creo que perfectamente puedes completar tu consulta. Lo que tendías que hacer es algo más o menos asi

SELECT Entradas.Referencia, Entradas.Color, Entradas.Talla, SUM(Entradas.stock - Salidas.Stock) FROM
(
**aquí pones la consulta que tienes para sacar tu tabla de entradas**
) Entradas
INNER JOIN
(
**aquí pones la consulta que tienes para sacar tu tabla de salidas**
) Salidas
ON
Entradas.Referencia = Salidas.Referencia and
Entradas.Color = Salidas.Color and
Entradas.Talla = Salidas.Talla
GROUP BY
Entradas.Referencia, Entradas.Color, Entradas.Talla

Es decir, haces uso de subconsultas en la parte del FROM para poder ligar tus resultados. El código que generaste para obtener tus entradas y salidas lo tienes que sustituir por el renglón que está entre ** y cuidar el nombre de tus campos. Si tienes problemas te pido que pongas en el post las consultas que generaste tú, para ayudarte a adecuarla. Esta sintaxis es válida para SQL Server, pero creo que la mayoría de los Motores de BD deberían permitirla.

Saludos.
Leo.
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

RE:Restar dos campos de dos tablas

Publicado por gustavo sanchis belda (5 intervenciones) el 13/09/2010 23:14:28
Gracias por contestar!!!

Vi que me consestaste en otro foro!!
He hecho lo que me has dicho!! he sustituido lo que me pusiste entre ** por mis consultas, pero sigue sin funcionarme.

El tema es que lo he probado con acces y si que funciona asi como tu dices, no me funciona del todo bien como te digo ya que si pongo una entrada y no le pongo una salida a esta misma entrada, en la consulta de los totales esta entrada no me sale, solo me salen las entradas que tienen salidas, como ya te digo esto es en acces.

Pero ahora estoy montandolo con mysql y ya no me funciona ni la consulta de totales, no se que es lo que hago mal porque lo copio tal cual.

Te voy a poner las consultas que hago y si me haces el fabor le hechas un vistazo.

Gracias.

*******Consulta de totales*******
SELECT ENTRADAS.Referencia, Entradas.Color, Entradas.Talla, SUM(ENTRADAS.Suma_E - SALIDAS.Suma_S)
FROM [SELECT ENTRADAS.Referencia, ENTRADAS.Color, ENTRADAS.Talla, Sum(ENTRADAS.Cantidad_E) AS Suma_E
FROM ENTRADAS
GROUP BY ENTRADAS.Referencia, ENTRADAS.Color, ENTRADAS.Talla
ORDER BY ENTRADAS.Referencia]. AS Entradas INNER JOIN [SELECT SALIDAS.Referencia, SALIDAS.Color, SALIDAS.Talla, Sum(SALIDAS.Cantidad_S) AS Suma_S
FROM SALIDAS
GROUP BY SALIDAS.Referencia, SALIDAS.Color, SALIDAS.Talla
ORDER BY SALIDAS.Referencia]. AS Salidas ON (ENTRADAS.Talla = SALIDAS.Talla) AND (ENTRADAS.Color = SALIDAS.Color) AND (ENTRADAS.Referencia = SALIDAS.Referencia)
GROUP BY ENTRADAS.Referencia, ENTRADAS.Color, ENTRADAS.Talla;

*****consulta entradas*****

SELECT ENTRADAS.Referencia, ENTRADAS.Familia, ENTRADAS.Color, ENTRADAS.Talla, Sum(ENTRADAS.Cantidad_E) AS Suma_E
FROM ENTRADAS
GROUP BY ENTRADAS.Referencia, ENTRADAS.Familia, ENTRADAS.Color, ENTRADAS.Talla
ORDER BY ENTRADAS.Referencia;

*****consulta salidas******

SELECT SALIDAS.Referencia, SALIDAS.Familia, SALIDAS.Color, SALIDAS.Talla, Sum(SALIDAS.Cantidad_S) AS Suma_S
FROM SALIDAS
GROUP BY SALIDAS.Referencia, SALIDAS.Familia, SALIDAS.Color, SALIDAS.Talla
ORDER BY SALIDAS.Referencia;
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

RE:Restar dos campos de dos tablas

Publicado por gustavo sanchis belda (5 intervenciones) el 13/09/2010 23:32:07
Hola de nuevo!!!

He estado probando varias cosas, y al final ya me funciona en el phpmyadmin las consultas de los totales.

Ahora solo me queda el problema que te he comentado anteriormente, cuando inserto entradas, pero a estas entradas que he insertado no les inserto salidas para restarlas, estas entradas que son stock que hay en el almacen, no me salen en la consulta de los totales, solo me salen las entradas que tienen salidas, es decir las entradas a las que se le resta algo!!

Me falta algo en la consulta para conseguir que me salgan las entradas a las que no les resto nada?

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