SQL: somma (unità) Tabella A meno somma (unità) Tabella B
-
28-10-2019 - |
Domanda
Ho 2 tavoli;
- item_in (item_id, unità)
- item_out (item_id, unità)
Ora dici che voglio sapere quante unità vengono inserisci per ogni articolo, ho solo chiesto
select sum(unit) from item_in order by item_id
Allo stesso modo, se voglio sapere quante unità vengono eliminate, ho solo chiesto
select sum(unit) from item_out order by item_id
Non so come interrogare il saldo (item_in - item_out) per ogni elemento.
È fantastico se riesco a effettuare tutte le query in una procedura memorizzata, perché voglio chiamare la procedura utilizzando Datawindow.
Per favore aiutatemi, grazie.
Soluzione
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
Altri suggerimenti
Non so nulla di Sybase, ma questa, o una sottile variazione di questo, dovrebbe funzionare.
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 metterà uno 0 ogni volta che un'unità da T2 è nullo, in modo da poter aderire correttamente all'importo dell'unità Item_in da esso.
Nota: funziona in SQL Server. Non so se potresti trovare alcuna differenza sintattica quando lo fai in Sybase :(
Spero che le seguenti operazioni di query:
select
sum(inn.unit) - sum(outt.unit)
from item_in inn
inner join item_out outt on inn.item_id = outt.item_id