Pregunta

Tengo 2 tablas;

  1. item_in (item_id, unidad)
  2. 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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top