Ver Mensaje Individual
  #3 (permalink)  
Antiguo 30/05/2012, 10:28
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Restando la suma de 2 columnas

Hola Nes24.

Esta sería la idea... siguiendo un poco la lógica del compañero Huesos52, aunque utilizando JOIN's:

Considerando que un producto tenga una y solo una venta y una y solo una compra podrías hacerlo así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM movimientos;
  2. +---------+------------+----------------+-------+
  3. | idVenta | idProducto | tipoMovimiento | coste |
  4. +---------+------------+----------------+-------+
  5. |       1 |          1 | venta          |  5500 |
  6. |       2 |          1 | compra         |  4500 |
  7. |       3 |          4 | venta          |  1000 |
  8. |       4 |          4 | compra         |   800 |
  9. +---------+------------+----------------+-------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT m.idProducto, v.coste, c.coste, v.coste - c.coste ganancia
  13.     -> FROM movimientos m
  14.     -> INNER JOIN movimientos v ON m.idProducto = v.idProducto
  15.     -> AND v.tipoMovimiento = 'venta'
  16.     -> INNER JOIN movimientos c ON m.idProducto = c.idProducto
  17.     -> AND c.tipoMovimiento = 'compra'
  18.     -> GROUP BY m.idProducto, v.idProducto, c.idProducto;
  19. +------------+-------+-------+----------+
  20. | idProducto | coste | coste | ganancia |
  21. +------------+-------+-------+----------+
  22. |          1 |  5500 |  4500 |     1000 |
  23. |          4 |  1000 |   800 |      200 |
  24. +------------+-------+-------+----------+
  25. 2 rows in set (0.00 sec)

Considerando que un producto pueda tener n ventas y m compras, podrías hacerlo así:

Código MySQL:
Ver original
  1. mysql> SELECT m.idProducto, v.coste, c.coste, v.coste - c.coste ganancia
  2.     -> FROM movimientos m
  3.     -> INNER JOIN
  4.     -> (SELECT idProducto, SUM(coste) coste FROM movimientos
  5.     -> WHERE tipoMovimiento = 'venta'
  6.     -> GROUP BY idProducto) v ON m.idProducto = v.idProducto
  7.     -> INNER JOIN
  8.     -> (SELECT idProducto, SUM(coste) coste FROM movimientos
  9.     -> WHERE tipoMovimiento = 'compra'
  10.     -> GROUP BY idProducto) c ON m.idProducto = c.idProducto
  11.     -> GROUP BY m.idProducto;
  12. +------------+-------+-------+----------+
  13. | idProducto | coste | coste | ganancia |
  14. +------------+-------+-------+----------+
  15. |          1 |  5500 |  4500 |     1000 |
  16. |          4 |  1000 |   800 |      200 |
  17. +------------+-------+-------+----------+
  18. 2 rows in set (0.01 sec)

Saludos
Leo.