2012-07-05 2 views
4

У меня есть 3 таблицы акций, внутрь, колонны IssueSQL Server 2005 неправильно выход

фондовой таблицы и данные:

part_no | part_name | totalqty 
10100  ciol  30 
112233  abc  20 
123456  coper  50 

внутрь таблицы:

part_no | qty 
123456 10 
123456 20 
10100 20 
112233 15 
10100 25 

выпуск таблица:

part_no | qty 
112233 20 
112233 15 
123456 10 
112233 25 
10100 40 
10100 20 

мой желаемый выпуск:

part_no | part_name |inwardQty |issueQty 
10100  coil   45  60 
112233  abc   15  60 
123456  coper  30  10 

Ниже запрос я написал, но не дает нужный мне вывод

select s.part_no,s.part_name,sum(i.qty) as inwardQty,sum(p.qty)as issueQty 
from stock s 
left join inward i on s.part_no = i.part_no 
left join issue p on s.part_no = p.part_no 
group by 
    s.part_no,s.part_name 

получает следующий вывод по этому запросу:

part_no | part_name |inwardQty |issueQty 
10100  coil   90  120 
112233  abc   45  60 
123456  coper  30  20 
+0

Добро пожаловать в StackOverflow: если вы отправляете код, XML или образцы данных, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора, чтобы красиво формат и синтаксис выделить его! –

+0

@marc_s - я * думаю * это фрагмент ниже предложения «мой желаемый результат:» –

+0

@Damien_The_Unbeliever: да, да, слишком рано утром, недостаточно кофе в моей системе :-) :-) –

ответ

4

Проблема заключается в том, что вы соответствия каждый ряд для inward с каждый ряд для issue, для whic h они имеют дело с той же частью. Я думаю, что подзапросы бы лучше здесь:

select s.part_no,s.part_name,i.qty as inwardQty,p.qty as issueQty 
from stock s 
left join 
    (select part_no,sum(qty) as qty from inward group by part_no) i on s.part_no = i.part_no 
left join 
    (select part_no,sum(qty) as qty from issue group by part_no) p on s.part_no = p.part_no 

Так что теперь, есть только один (или ноль) строк, чтобы присоединиться в каждом из соединений, и вы не получите декартово произведение.

+0

Спасибо, сэр , теперь он работает отлично. Я хочу спросить вас, сэр. В этом запросе, если я хочу, чтобы эти данные отображались в течение определенного месяца (eg.month (i.date) = 6), тогда где я должен написать условие месяца в приведенном выше запрос, если я добавлю столбец данных во внутреннюю таблицу. Спасибо – user1482953

1

Попробуйте этот запрос:

SELECT 
    s.part_no, s.part_name, 
    InwardQty = (SELECT SUM(qty) FROM @inward i WHERE i.part_no = s.part_no), 
    IssueQty = (SELECT SUM(qty) FROM @issue p WHERE p.part_no = s.part_no) 
FROM 
    dbo.stock s 
GROUP BY 
    s.part_no, s.part_name 

дает мне именно ваш желаемый результат.