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+---------+------------+----------------+-------+
| idVenta | idProducto | tipoMovimiento | coste |
+---------+------------+----------------+-------+
| 1 | 1 | venta | 5500 |
| 2 | 1 | compra | 4500 |
| 3 | 4 | venta | 1000 |
| 4 | 4 | compra | 800 |
+---------+------------+----------------+-------+
mysql
> SELECT m.idProducto
, v.coste
, c.coste
, v.coste
- c.coste ganancia
-> INNER JOIN movimientos v
ON m.idProducto
= v.idProducto
-> AND v.tipoMovimiento
= 'venta' -> INNER JOIN movimientos c
ON m.idProducto
= c.idProducto
-> AND c.tipoMovimiento
= 'compra' -> GROUP BY m.idProducto
, v.idProducto
, c.idProducto
; +------------+-------+-------+----------+
| idProducto | coste | coste | ganancia |
+------------+-------+-------+----------+
| 1 | 5500 | 4500 | 1000 |
| 4 | 1000 | 800 | 200 |
+------------+-------+-------+----------+
Considerando que un producto pueda tener n ventas y m compras, podrías hacerlo así:
Código MySQL:
Ver originalmysql
> SELECT m.idProducto
, v.coste
, c.coste
, v.coste
- c.coste ganancia
-> WHERE tipoMovimiento
= 'venta' -> GROUP BY idProducto
) v
ON m.idProducto
= v.idProducto
-> WHERE tipoMovimiento
= 'compra' -> GROUP BY idProducto
) c
ON m.idProducto
= c.idProducto
+------------+-------+-------+----------+
| idProducto | coste | coste | ganancia |
+------------+-------+-------+----------+
| 1 | 5500 | 4500 | 1000 |
| 4 | 1000 | 800 | 200 |
+------------+-------+-------+----------+
Saludos
Leo.