SQL: Summe (Einheit) Tabelle A Minus Summe (Einheit) Tabelle B
-
28-10-2019 - |
Frage
Ich habe 2 Tische;
- item_in (item_id, Einheit)
- 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.
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