How can I join these two queries?

3
select Nombre, sum(Compras_Productos.Cantidad) as Cant_adq
from Compras_Productos, Productos
where Compras_Productos.Id_Producto=Productos.Codigo
order by Nombre

select Nombre, sum(Ventas_Productos.Cantidad) as Cant_vendida
from Ventas_Productos, Productos
where Ventas_Productos.Id_Producto=Productos.Codigo
order by Nombre

    
asked by Rodrigo Magallán 30.09.2018 в 03:15
source

4 answers

4

I think it's like this:

SELECT p.Nombre,SUM(vp.Cantidad) as vendidos,SUM(cp.Cantidad) as adquiridos 
FROM Productos p 
LEFT JOIN Compras_Productos cp ON cp.Id_Producto = p.Codigo 
LEFT JOIN Ventas_Productos vp ON vp.Id_Producto = p.Codigo 
GROUP BY p.Nombre // este group solo por si acaso.
ORDER BY p.Nombre;

Greetings and good energy:)

    
answered by 30.09.2018 / 05:29
source
2

I did it this way, I do not know if there is another easier way to do it.

SELECT P.Nombre AS Producto, SUM(CP.Cantidad) AS Cantidad INTO #Adquiridos 
FROM Compras_Productos CP INNER JOIN Productos P ON 
CP.Id_Producto=P.Codigo GROUP BY (P.Nombre) ORDER BY Nombre ASC;
SELECT P.Nombre AS Producto, SUM(Cantidad) AS Cantidad INTO #Vendidos FROM 
Ventas_Productos VP, Productos P WHERE VP.Id_Producto=P.Codigo GROUP BY 
(P.Nombre) ORDER BY P.Nombre ASC;
SELECT A.Producto AS Producto, SUM(A.Cantidad) AS Cant_Adquirida, 
SUM(V.Cantidad) AS Cant_Vendida INTO #AdquiVend FROM #Adquiridos A LEFT 
JOIN #Vendidos V ON A.Producto=V.Producto GROUP BY (A.Producto);
UPDATE #AdquiVend SET Cant_Vendida=0 WHERE Cant_Vendida IS NULL;
SELECT Producto, Cant_Adquirida, Cant_Vendida, Cant_Adquirida-Cant_Vendida 
AS Saldo INTO #Saldo FROM #AdquiVend;
SELECT *FROM #Saldo;
    
answered by 30.09.2018 в 22:36
1

Try the UNION instruction, as follows:

select Nombre, sum(Compras_Productos.Cantidad) as Cant_adq
from Compras_Productos, Productos
where Compras_Productos.Id_Producto=Productos.Codigo
order by Nombre
UNION
select Nombre, sum(Ventas_Productos.Cantidad) as Cant_vendida
from Ventas_Productos, Productos
where Ventas_Productos.Id_Producto=Productos.Codigo
order by Nombre
    
answered by 30.09.2018 в 03:23
1

You can try to match the keys for the three tables, and the GROUP BY so that the quantities go according to the name of the product:

select      Nombre, sum(compras_productos.cantidad) as Cant_Adquirida, sum(ventas_productos.cantidad) as Cant_Vendida, sum(compras_productos.cantidad) - sum(ventas_productos.cantidad) as Saldo
from        compras_productos, productos, ventas_productos
where       compras_productos.id_producto = productos.codigo and productos.codigo = ventas_productos.id_producto
group by    Nombre
order by    Nombre
    
answered by 30.09.2018 в 04:22