2016-08-24 7 views
0

Я пытаюсь создать запрос, чтобы дать мне некоторую информацию, сделав внутреннее соединение на двух таблицах, tableA и tableB. Вот как они выглядят:SQL Server: выберите Inner Join

TableA:

ClientID  RevNo  RevPurp 
------------------------------ 
123   4557  1 
124   4555  1 
123   6574  2 
123   7857  3 
124   8987  2 

TableB:

RevNo  ClientID  Active 
------------------- ------------- 
4557   123   True 
6574   123   True 
7857   123   True 
8987   124   True 
4555   124   True 

Вот что я пытаюсь сделать. Я пытаюсь сделать ...

Select Distinct ClientID 
From TableB 
Inner Join TableA On tableB.RevNo = tblB.RevNo 
Where RevPurp is not 3. 

RevPurp может быть 1,2,3 - Я только пытаюсь выбрать те отдельные клиенты, которые могут иметь либо 1,2, но не может иметь 3.

Глядя на данные в таблице я должен иметь только 1 запись ....

124 

Поскольку клиент 123 имеет RevPurp 3. Таким образом, если клиент имеет RevPurp 3, я не хочу видеть, что клиент когда Я выполняю запрос!

EDIT - я добавил поле в TableB под названием ACTIVE. Мне нужно убедиться, что Active = True при выполнении моего запроса!

+6

Я не вижу цели TableB. Вы можете получить нужные результаты из TableA –

+0

@devlincarnate Мне нужно использовать таблицу, потому что там находятся мои фильтры WHERE. – BobSki

+2

@Bobski: какие фильтры 'where'? У вас нет на 'TableB'. Если вы не указали некоторые детали. – sstan

ответ

1

, как @devlin упоминается в комментарии, вам не нужно TableB, чтобы сделать это: Вы хотите список уникальных (отдельных) ClientIds в TableA, где нет записи в таблицеA с значением RevPurp 3.

EDIT: a dding в префиксе фильтра на TableB.Active

Select distinct a.ClientId 
from tableA a join tableb b 
    on b.RevNo = a.RevNo 
Where b.Active = 1 -- <===== is Active a BIT field 
    and Not exists 
    (Select * from tableA 
    Where ClientId = a.ClientId 
     and RevPurp = 3) 
+1

ахх, он не хочет, чтобы clientId, если какая-либо запись имеет 3 в нем. , –

+0

Мне нужно это выбрать из TableB inner Присоединиться к TableA, потому что мне нужно использовать tableB для получения дополнительных критериев в инструкции WHERE – BobSki

+0

Ну, тогда перечислите критерии, которые вам нужны из TableB (Правила фильтрации или сортировки, которые вам нужно реализовать) как часть вашего вопрос. В противном случае мы отвечаем на неправильный вопрос. –

1

Простой group by с пунктом having должно работать:

select clientId 
    from tableA 
group by clientId 
having count(*) = count(case when RevPurp <> 3 then 'X' end) 
1

Вы можете попробовать не

Select Distinct ClientID 
from TableB 
inner join TableA on tableB.RevNo = tblB.RevNo 
where tableA.ClientID not in (select ClienID from tableA where RevPurp = 3) 
Смежные вопросы