2014-12-15 3 views
1

Друзья Я не могу получить правильный результат. Предлагайте, спасибо в Advance. У меня есть две таблицы и пытаются получить Количество От балансsql Левое соединение, дающее дубликаты нескольких значений

Одна из них Покупка Таблица (purchase_detail)

Pur_Date Item_Id  Pur_Qty 
2014-10-08 12792  25 
2014-11-01 133263  20 
2014-10-01 133263  2 
2014-11-20 12792  10 

Во-вторых, продажа Таблица (sale_detail)

Sale_Date Item_Id Sale_Qty 
2014-11-17 133263  -6 
2014-11-05 12792  -1 
2014-11-24 133263  -2 
2014-10-28 12792  -6 
2014-11-05 133263  -2 

После использования левое соединение SQL:

select a.pur_item, sum(a.pur_qty + b.sold_qty) as bal_qty 
from purchase_item_qty_amount a left join sale_item_qty_amount b 
on a.pur_item =b.sale_item where a.pur_item IN(12792,133263) 
group by 1; 

Результат - Но это неправильно

Item_Id Bal_qty 
12792  56 
133263 46 

Результат - Он должен быть

Item_Id Bal_qty 
12792  28 
133263  12 
+0

Я предполагаю, что это должно быть '(сумма (a.pur_qty) + сумма (b.sold_qty)), как bal_qty' –

+0

Вы дали нам две таблицы, но в вашем запросе вы ссылаетесь на две разные таблицы: – rtruszk

+0

Вы не можете использовать соединение для этого случая, так как оно объединяет все левые строки в правильные строки. Попробуйте свой запрос без sum/group, чтобы просмотреть необработанные данные, и вы поймете, что происходит: 'select a.pur_item, a.pur_qty, b.sold_qty from purchase_item_qty_amount left join sale_item_qty_amount b на a.pur_item = b.sale_item, где .pur_item IN (12792,133263); ' – dotcomly

ответ

0

Попробуйте непроверенный запрос:

select pur_item, sum(as bal_qty) from (
select pur_item, sum(a.pur_qty) as bal_qty 
from purchase_item_qty_amount a 
group by 1 
union 
select pur_item, sum(b.sold_qty)as bal_qty 
from sale_item_qty_amount b 
group by 1) 
group by 1 
+1

Я бы использовал UNION ALL, на всякий случай ... (Также проще/быстрее вычислить.) – jarlh

0

Вы должны использовать объединение вместо объединения, поскольку левые строки имеют несколько совпадений справа, которые вызывают слишком большое количество данных для вычисления. Попробуйте выполнить запрос без суммы и группы, чтобы просмотреть необработанные данные, и вы увидите, что я имею в виду.

Ваш запрос, без группы/сумма:

select a.pur_item, a.pur_qty, b.sold_qty from purchase_item_qty_amount a left join sale_item_qty_amount b on a.pur_item = b.sale_item where a.pur_item IN (12792,133263); 

Вот запрос, который работает, как и следовало ожидать:

select item, sum(a.pur_qty) + sum(a.sold_qty) as bal_qty from (select pur_item as item, sum(pur_qty) as pur_qty, 0 as sold_qty from purchase_item_qty_amount where pur_item in (12792,133263) group by pur_item union select sale_item as item, 0 as pur_qty, sum(sold_qty) as sold_qty from sale_item_qty_amount where sale_item in (12792,133263) group by sale_item) a group by item; 
0

Вот полный манекен вашего вопроса, попробуйте это вам будет получить желаемый результат: -

purchase table 

create table pt(Pur_Date date,Item_Id number, Pur_Qty number) 

insert into pt values('08.oct.2014',12792,25); 
insert into pt values('01.nov.2014',133263,20); 
insert into pt values('01.oct.2014',133263,2); 
insert into pt values('20.nov.2014',12792,10); 


sales table 

create table st(Sale_Date date , Item_Id number, Sale_Qty number) 

insert into st values('17.nov.2014',133263,-6); 
insert into st values('05.nov.2014',12792,-1); 
insert into st values('24.nov.2014',133263,-2); 
insert into st values('28.oct.2014',12792,-6); 
insert into st values('05.nov.2014',133263,-2); 


select purchase.Item_Id,(purchase.pur_qty+sale.sale_qty) bal_qty 
from 
(
select a.Item_Id, sum(a.pur_qty) pur_qty 
from pt a 
group by a.Item_Id 
) purchase 
left join 
(
select b.Item_Id, 
sum(b.sale_qty) sale_qty 
from st b 
group by b.Item_Id 
) sale 
on sale.Item_Id = purchase.Item_Id 
where purchase.Item_Id in (12792,133263) 
order by 1; 
+1

Thank You Done !! –

+0

Уважаемый @GouravGarg, если вы считаете это правильным, подтвердите его и примите ответ, нажав на правильный символ –

+1

У меня был аналогичный ответ http://www.sqlfiddle.com/#!15/49b13/16 – ankurtr

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