SQL: Сумма (единица) Таблица A минус сумма (единица) Таблица B

StackOverflow https://stackoverflow.com/questions/9357936

  •  28-10-2019
  •  | 
  •  

Вопрос

У меня есть 2 стола;

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

Теперь давайте скажем, я хочу знать, сколько единиц вставлено для каждого предмета, я просто запрошу

select sum(unit) from item_in order by item_id

Точно так же, если я хочу знать, сколько единиц вынимает, я просто запрошу

select sum(unit) from item_out order by item_id

Я не знаю, как запросить баланс (item_in - item_out) для каждого элемента.

Это здорово, если я могу сделать весь запрос в одной хранимой процедуре, потому что я хочу вызвать процедуру, используя DataWindow.

Пожалуйста, помогите, спасибо.

Это было полезно?

Решение

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

Другие советы

Я ничего не знаю о Sybase, но это или тонкое изменение этого должно работать.

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 будет размещать 0 всякий раз, когда единица из T2 является нулевым, так что вы можете должным образом отменить сумму единицы item_in.

Примечание: это работает в SQL Server. Я не знаю, можете ли вы найти какую -либо синтаксическую разницу при ее запусках в Sybase :(

Я надеюсь, что следующий запрос работает:

select 
sum(inn.unit) - sum(outt.unit)
from item_in inn
inner join item_out outt on inn.item_id = outt.item_id
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top