2009-09-02 2 views
1

Я пытаюсь сделать ВЗАИМОДЕЙСТВУЮЩИЙСЯ JOIN, с несколькими условиями соединения. Вот мой запрос (я объясню проблему ниже):SQL - Несколько критериев с LEFT OUTER JOIN

SELECT ad.*, cp.P_A, cp.P_B, cp.P_C 
INTO #AggData3 
FROM #AggData2 ad 
LEFT OUTER JOIN #CompPriceTemp cp 
ON ad.PART=cp.Part_No 
and ad.[Month]=cp.[Month] 
and ad.[Year]=cp.[Year] 
GO 

Для каждой записи в # AggData2, что средняя цена и объем в месяц для каждой части, я хочу присоединиться цены трех конкурентов (A , B & C). Таким образом, я хочу присоединиться к Части, Месяцу и Году. Поскольку некоторые конкуренты не предлагают все части, я использую LEFT OUTER JOIN. Таким образом, результирующая таблица (# AggData3) должна иметь то же самое количество строк, что и исходная таблица (# AggData2), только с тремя дополнительными столбцами с ценами конкурентов.

Однако новая таблица (# AggData3) имеет ~ 35 000 строк, чем # AggData2.

Любые идеи, почему это происходит, и как исправить мой запрос.

ответ

0

Вы уверены, что у вас есть только одна соответствующая строка в CompPriceTemp для каждой строки в AggData2?

2

Поскольку в таблице #CompPriceTemp имеется несколько строк, которые соответствуют одной строке в # AggData2.

Возможно ли это для каждого из трех участников? Если это так, то вам нужно три объединения, каждый в одну таблицу, по одному для каждого из трех участников?

Но если в каждом месяце, году и товаре должна быть одна строка в #CompPriceTemp, с тремя отдельными столбцами по одному столбцу для каждого конкурента, тогда у вас есть плохие данные.

1

Wild догадка:

ON ad.PART=cp.Part_No 
and ad.[Month]=cp.[Month] 
and ad.[Year]=cp.[Year] 

Этот запрос не однозначно идентифицировать строки в СР. Или CP имеет ~ 35000 дубликатов строк.