SQL: таблица суммы (единицы) минус таблица суммы (единицы) b - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть 2 таблицы;

  1. item_in (item_id, блок)
  2. item_out (item_id, блок)

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

* * 1010

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

select sum(unit) from item_out order by item_id

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

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

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

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012
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
1 голос
/ 20 февраля 2012

Я ничего не знаю о 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 равна NULL, так что вы можете правильно вычестьколичество единиц item_in из него.

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

0 голосов
/ 20 февраля 2012

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

select 
sum(inn.unit) - sum(outt.unit)
from item_in inn
inner join item_out outt on inn.item_id = outt.item_id
...