SQL: SUM (Unidad) Tabla A menos suma (Unidad) Tabla B
-
28-10-2019 - |
Pregunta
Tengo 2 tablas;
- item_in (item_id, unidad)
- item_out (item_id, unidad)
Ahora digamos que quiero saber cuántas unidades se insertarán para cada artículo, solo consulta
select sum(unit) from item_in order by item_id
Del mismo modo, si quiero saber cuántas unidades se están sacando, solo consulta
select sum(unit) from item_out order by item_id
No sé cómo consultar el saldo (item_in - item_out) para cada elemento.
Es genial si puedo hacer toda la consulta en un procedimiento almacenado, porque quiero llamar al procedimiento usando DataWindow.
Por favor ayuda, gracias.
Solución
SELECT
item_id,
SUM(unit) AS unit_balance
FROM (
SELECT item_id, unit FROM item_in
UNION ALL
SELECT item_id, -unit FROM item_out
) AS s (item_id, unit)
GROUP BY item_id
Otros consejos
No sé nada sobre Sybase, pero esto, o una variación sutil de esto, debería funcionar.
select t1.item_id, sum(t1.unit - coalesce(t2.unit, 0)) as Balance
from item_in t1
left join item_out t2
on t1.item_id = t2.item_id
group by t1.item_id
Coalesce pondrá un 0 cada vez que una unidad de T2 sea nula, de modo que pueda reducir adecuadamente la cantidad de unidad de elemento.
Nota: Esto funciona en SQL Server. No sé si puede encontrar alguna diferencia sintáctica al ejecutarla en Sybase :(
Espero que funcione la siguiente consulta:
select
sum(inn.unit) - sum(outt.unit)
from item_in inn
inner join item_out outt on inn.item_id = outt.item_id