SQL - ¿Cómo obtener las monedas disponibles restando las ventas y comisiones a las compras en 2 tablas?

 
Vista:
sin imagen de perfil

¿Cómo obtener las monedas disponibles restando las ventas y comisiones a las compras en 2 tablas?

Publicado por Paco (7 intervenciones) el 16/11/2022 09:25:51
Buenos días. Estoy haciendo una base de datos en Access para el control de compra-venta de criptomonedas. Ya tengo implantado el método FIFO, introducción de datos y demás.

Quiero mostrar en el formulario de venta las monedas disponibles cuando se elige una para introducir una venta, pero no consigo dar con la consulta correcta.

Tengo 2 tablas, COMPRA y VENTA. Quiero restarle al campo CANTIDAD de COMPRA la suma de los campos CANTIDAD y COMISION de VENTA para cada moneda diferente.

He probado un LEFT JOIN (para que la consulta muestre también el saldo de las monedas que aún no tienen ventas), pero lo que obtengo es que para cada ocurrencia de una moneda en el campo cantidad de COMPRA me suma todas las cantidades y comisiones de VENTA, por lo que el resultado no es correct:

Select COMPRA.MONEDA, Sum(compra.cantidad) as COMPRAS, Sum(venta.cantidad) AS VENTAS, sum(venta.comision) as COMISION, COMPRAS-VENTAS-COMISION as SALDO
From COMPRA left join Venta on COMPRA.moneda=VENTA.moneda
group by COMPRA.MONEDA

También he probado usando WHERE, pero tampoco obtengo nada correcto:

Select COMPRA.MONEDA, compra.cantidad as COMPRAS, Sum(venta.cantidad) AS VENTAS, sum(venta.comision) as COMISION, COMPRAS-VENTAS-COMISION as SALDO
From COMPRA, venta
where compra.moneda=venta.moneda
group by COMPRA.MONEDA order by compra.moneda

Seguro que para los expertos que hay por aquí es una tontería, pero no doy con ello. Gracias por adelantado!
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
sin imagen de perfil

¿Cómo obtener las monedas disponibles restando las ventas y comisiones a las compras en 2 tablas?

Publicado por Paco (7 intervenciones) el 16/11/2022 10:15:29
Averiguado... he conseguido hacerlo usando subconsultas:

SELECT C.moneda, SUM(COMPRAS - VENTAS) FROM
(
select moneda, sum(cantidad) as COMPRAS from compra group by moneda
) C
LEFT JOIN
(
select moneda, sum(cantidad) + sum(comision) as VENTAS from venta group by moneda
) V
ON
c.moneda=v.moneda

GROUP BY
C.MONEDA
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
sin imagen de perfil

¿Cómo obtener las monedas disponibles restando las ventas y comisiones a las compras en 2 tablas?

Publicado por Paco (7 intervenciones) el 16/11/2022 11:29:40
ACTUALIZO:
Consigo que me calcule bien las existencias de las monedas que tienen cantidad introducida en compras y en ventas, pero de las que aún no tienen ventas, me salen en el resultado pero con cantidad vacía (lo que esperaría es que me saliera el total disponible (suma de cantidades compradas)).

Por si podéis ver dónde estaría el error. 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
sin imagen de perfil

¿Cómo obtener las monedas disponibles restando las ventas y comisiones a las compras en 2 tablas?

Publicado por Paco (7 intervenciones) el 16/11/2022 11:46:32
Vuelvo a responderme, añadiendo un UNION con las monedas que tienen ventas, ya me sale:

SELECT C.moneda as MONEDA, SUM(COMPRAS - VENTAS) AS SALDO
FROM (SELECT moneda, sum(cantidad) AS COMPRAS FROM compra GROUP BY moneda) C INNER JOIN (SELECT moneda, sum(cantidad) + sum(comision) AS VENTAS FROM venta GROUP BY moneda) V ON c.moneda=v.moneda
GROUP BY C.MONEDA

union

SELECT MONEDA, CANTIDAD as saldo from compra where moneda not in (select moneda from venta)
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
sin imagen de perfil

¿Cómo obtener las monedas disponibles restando las ventas y comisiones a las compras en 2 tablas?

Publicado por Paco (7 intervenciones) el 16/11/2022 21:24:45
Ahora necesito que un cuadro de texto o etiqueta me muestre ese dato de saldo en un formulario a partir del dato escrito en un cuadro de texto de ese mismo formulario, es decir, cuando pierda el foco, quisiera que ejecutara esta consulta, filtrara por la moneda existente en el cuadro de texto y lo escribiera en ese cuadro de texto que muestra el "SALDO" de esa moneda.

Gracias por adelantado.
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