none
Consulta SQL RRS feed

  • Pregunta

  • Hola, tengo estas dos consultas:

    SELECT p.Nombre, SUM(Cantidad) 'Cantidad' from ventas_mercaderia_deposito d
    INNER JOIN productos p ON p.idProducto=d.idProducto
    GROUP BY p.Nombre

    Nombre    Cantidad
    ARENA    100.00
    CAL    400.00
    CEMENTO    200.00


    SELECT  p.Nombre, SUM(Cantidad) 'Retiro' from retiros_mercaderia  r
    INNER JOIN productos p ON p.idProducto=r.idProducto
    GROUP BY p.Nombre

    Nombre    Retiro
    CAL    20.00
    CEMENTO    50.00


    Yo necesito mostrar en la misma fila.

    por ej:

    Nombre    Cantidad    Retiro  Saldo

    CAL            400              20     380

    Alguien me podria dar una mano?



    martes, 9 de marzo de 2021 12:50

Respuestas

  • Hola Mauricio Hamak:

    Podría ser algo así:

    Declare @table1 table (nombre varchar(100), Cantidad decimal(5,2))
    Declare @table2 table (nombre varchar(100), Retiro decimal(5,2));
    Insert into @table1 (nombre, Cantidad)
    values
    ('ARENA',100.00),
    ('CAL',400.00),
    ('CEMENTO',200.00);
    Insert into @table2 (nombre, Retiro)
    values
    ('CAL', 20.00),
    ('CEMENTO', 50.00);
    
    
    ;With R AS (
    	Select * from @table1 T
    	), R2 AS (
    	Select * from @table2 T
    	)
    select coalesce(R.nombre, r2.nombre) as nombre,
    		ISNULL(r.cantidad,0) as cantidad,
    		ISNULL(r2.retiro,0) as retiro,
    		ISNULL(r.cantidad,0) - ISNULL(r2.retiro,0) As Saldo
    from R full join R2 on R.nombre = R2.nombre


    Lo único que tienes que cambiar es que el conjunto R en el caso sería tú primera consulta, y el conjunto R2 sería tú segunda consulta.

    Ambas se mezclan usando un full join. Caso de que no sea posible que haya retiros de un producto que no tuviera cantidad, entonces en vez de full join, utiliza un left join.

    Tal que:

    ;With R AS (
    	SELECT p.Nombre, SUM(Cantidad) 'Cantidad' from ventas_mercaderia_deposito d
    		INNER JOIN productos p ON p.idProducto=d.idProducto
    		GROUP BY p.Nombre
    	), R2 AS (
    	SELECT  p.Nombre, SUM(Cantidad) 'Retiro' from retiros_mercaderia  r
    		INNER JOIN productos p ON p.idProducto=r.idProducto
    		GROUP BY p.Nombre
    	)
    select coalesce(R.nombre, r2.nombre) as nombre,
    		ISNULL(r.cantidad,0) as cantidad,
    		ISNULL(r2.retiro,0) as retiro,
    		ISNULL(r.cantidad,0) - ISNULL(r2.retiro,0) As Saldo
    from R full join R2 on R.nombre = R2.nombre

    Combinaciones

    https://javifer2.wordpress.com/2019/09/16/combinaciones-entre-tablas-inner-left-right-full/

    Ctes

    https://javifer2.wordpress.com/2018/12/18/with-cte-tablas-de-expresion-comun-2-correlativos/

    • Marcado como respuesta Mauricio Hamak martes, 9 de marzo de 2021 14:12
    martes, 9 de marzo de 2021 13:41