2013-09-14 6 views
0

У меня есть две таблицы sql, purchase и sent. Я хочу знать непогашенный остаток позиций в любой день. Для этого я пытаюсь взять sum(puchase.quantity) - sum(sent.quantity) where date<some date. У меня могут быть индивидуальные запросы, но я не знаю, как их объединить.разница сумм двух разных таблиц в sql

Вот индивидуальные запросы:

select item,sum(quantity) from sent where datee <'some date' group by item 
select item,sum(quantity) from purchase where datee<'some date' group by item 

Пожалуйста, скажите мне, если есть аа лучший способ, чтобы получить остаток задолженности.

Заранее спасибо.

ответ

1

Я думаю, что вы хотите, это

Вот рабочий пример SQLFiddle

CREATE TABLE sent 
(
item int, 
quantity int 
); 

CREATE TABLE purchase 
(
item int, 
quantity int 
); 

insert into sent values(1,4); 
insert into sent values(2,7); 
insert into sent values(3,9); 
insert into sent values(4,5); 
insert into sent values(5,9); 

insert into purchase values(1,2); 
insert into purchase values(2,5); 
insert into purchase values(3,3); 
insert into purchase values(4,2); 
insert into purchase values(5,7); 


select sent.item , (sum(IFNULL(sent.quantity,0)) - sum(IFNULL(purchase.quantity,0))) as diff 
FROM sent , purchase Where sent.item = purchase.item group by sent.item 
+0

Я бы написал аналогичное решение. Если вы будете использовать внешнее соединение вместо размножения deccartes, тогда я отвечу на ваш ответ. –

+0

это не работает, если мы купили один товар более одного раза ... например, в моем случае я купил один элемент три раза, вместо правильного ответа 18 запрос дает мне 54 .. –

+0

ok, @AliHaider, затем создайте запрос, в котором ваши суммирующие запросы являются подзапросами, а полученные отношения называются t1 и t2. Присоединитесь к ним, используя условие соединения для элемента, и оно должно работать. –

1

Может быть, есть более succint способ получить то, что вы хотите, но folliwing должен дать вам правильные результаты:

SELECT s.item, 
     s.qty as total_sent, 
     COALESCE(p.qty,0) as total_purchase, 
     s.qty - COALESCE(p.qty,0) as stock 
FROM 
(
    SELECT item, sum(quantity) as qty 
    FROM sent 
    GROUP BY item 
) s 
LEFT JOIN 
(
    SELECT item, sum(quantity) as qty 
    FROM purchase 
    GROUP BY item 
) p 
ON p.item = s.item 
+0

Это сработало спасибо alot –

+0

@AliHaider. нет проблем –

Смежные вопросы