Frage

Ich habe 2 Tische;

  1. item_in (item_id, Einheit)
  2. item_out (item_id, Einheit)

Nehmen Sie jetzt an, ich möchte wissen, wie viele Einheiten für jeden Artikel einfügen werden. Ich verlange einfach nur

select sum(unit) from item_in order by item_id

Ebenso, wenn ich wissen möchte, wie viele Einheiten herausgenommen werden, frag ich nur

select sum(unit) from item_out order by item_id

Ich weiß nicht, wie man das Gleichgewicht (item_in - item_out) für jedes Element abfragt.

Es ist großartig, wenn ich die gesamte Abfrage in einer gespeicherten Prozedur erstellen kann, da ich die Prozedur mit DataWindow aufrufen möchte.

Bitte helfen Sie, danke.

War es hilfreich?

Lösung

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

Andere Tipps

Ich weiß nichts über Sybase, aber diese oder eine subtile Variation davon sollte funktionieren.

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

Koalesce setzt eine 0 nach, wenn eine Einheit von T2 null ist, so dass Sie die Menge der Item_in -Einheit von ihm ordnungsgemäß substract substract.

Hinweis: Dies funktioniert im SQL Server. Ich weiß nicht, ob Sie beim Ausführen in Sybase möglicherweise einen syntaktischen Unterschied finden :(

Ich hoffe, die folgende Frage funktioniert:

select 
sum(inn.unit) - sum(outt.unit)
from item_in inn
inner join item_out outt on inn.item_id = outt.item_id
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top