SQL: somme (unité) déposer un tableau somme moins (unité) b
-
28-10-2019 - |
Question
J'ai 2 tables;
- item_in (item_id unité)
- item_out (item_id unité)
Maintenant, nous allons dire que je veux savoir combien unité est insertion pour chaque élément, je viens de requête
select sum(unit) from item_in order by item_id
De même, si je veux savoir combien l'unité est prise, je demande simplement
select sum(unit) from item_out order by item_id
Je ne sais pas comment interroger l'équilibre (item_in - item_out). Pour chaque élément
Il est grand si je peux faire toute la requête dans une procédure stockée, parce que je veux appeler la procédure en utilisant DataWindow.
S'il vous plaît aider, merci.
La solution
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
Autres conseils
Je ne sais rien sybase, mais cela, ou une variation subtile de ce fait, devrait fonctionner.
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 mettre un 0 à chaque fois qu'une unité de t2 est NULL, de sorte que vous pouvez correctement le montant de soustrayez unité item_in de celui-ci.
Note: Cela fonctionne dans SQL Server. Je ne sais pas si vous pouvez trouver une différence syntaxique quand il en cours d'exécution dans sybase: (
J'espère que les travaux de requête suivants:
select
sum(inn.unit) - sum(outt.unit)
from item_in inn
inner join item_out outt on inn.item_id = outt.item_id