2015-03-11 2 views
1

Всем привет и Любой,SQL LEFT JOIN Условия

У меня есть вопрос, который я надеялся решить с помощью левой Присоединяйтесь, используя условия, однако, я до сих пор понять это, и я начинаю, чтобы получить головную боль , Я ищу, чтобы вытащить данные при использовании левого соединения, но я хочу, чтобы только два столбца были включены, и я хочу, чтобы условие основывалось на третьем столбце из этой второй таблицы. Также я открыт для решений, которые не обязательно требуют условия левого соединения.

Select a.ID, 
a.AssociateName, 
a.FormTypeID 
b.Segment1 
b.Segment2 
From NinjaTable a 
Left Join ShinobiTable b On b.AssociateName = a.AssociateName 

Вот условие, что мне нужно (я собираюсь слово это в, если заявление, хотя я знаю, что это не относится), что делает это сложно это возможно ассоциировать с более чем 1 задание Положение дел. Возможно, они переехали в другой отдел, и их предыдущий список теперь неактивен, однако у них все еще есть еще один активный. Мне нужно условие, чтобы по существу захватить активным только тогда, когда применимое еще, если не является активным, то захватить неактивный один

IF b.AssignmentStatus = 'Active' then perform left join Normally 
IF b.AssignmentStatus = 'Inactive' Then only perform left join if there is not an active one. 
+0

Это может быть не обязательно, но определения таблиц могут помочь. В левом соединении вы получите все данные в левой таблице и любые совпадающие данные или нуль во второй таблице. Это то, что вы хотите? – Chris

+1

как о двух подзапросах, отфильтрованных 'WHERE', а затем' UNION''d вместе? –

+1

Некоторые примеры данных и ожидаемые результаты всегда полезны:] –

ответ

1

Вы можете включить обе записи состояния и затем объединяют их, например:

Select a.ID, 
a.AssociateName, 
a.FormTypeID, 
coalesce(b.Segment1, c.Segment1), 
coalesce(b.Segment2, c.Segment2) 
From NinjaTable a 
Left Join ShinobiTable b On b.AssociateName = a.AssociateName and b.AssignmentStatus = 'Active' 
Left Join ShinobiTable c On c.AssociateName = a.AssociateName and c.AssignmentStatus = 'Inactive' 
+0

Вы - Awesome Gordy! это именно то, что мне нужно! У меня есть небольшая проблема, однако, это не то, что вы предоставили более или менее, я все еще получаю 4 дубликата. Потому что (И я только узнал об этом) будет случай, когда помощник перемещает подразделения более одного раза в реестре. поэтому у меня есть пара единомышленников, у которых есть 1 Active Record и 2 Inactive Records, и, таким образом, во втором левом соединении с ним создается дублирующаяся запись для второго неактивного. Я скажу, что он показывает только правильные данные сегмента, но его обман :( – Xoduszero