2016-08-24 80 views
0

我試圖建立一個查詢來給我一些信息,在兩個表上進行內部聯接,tableAtableB。下面是他們的樣子:SQL Server:選擇內部聯接

表A

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

表B

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

綜觀表中的數據我應該僅記錄....

124 

因爲客戶端123 RevPurp 3.因此,如果客戶有RevPurp 3,我不希望看到客戶端時我執行查詢!

編輯 - 我在TableB中添加了一個名爲ACTIVE的字段。我在查詢時需要確保Active = True!

+6

我無法看到TableB的用途。你可以從TableA得到你需要的結果 –

+0

@devlincarnate我需要使用表格,因爲那是我的WHERE過濾器所在的地方。 – BobSki

+2

@Bobski:什麼'where'過濾器? 'TableB'上沒有任何東西。除非你省略了一些細節。 – sstan

回答

1

在評論中提到@devlin,你並不需要tableB的做到這一點: 您需要表A中唯一(不同)ClientId的列表,其中TableA中沒有記錄,RevPurp值爲3.

編輯: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

上不會有內部聯接,如果任何記錄中有3個記錄,則不需要clientId。 。 –

+0

我需要它從TableB inner中選擇加入到TableA中,因爲我需要在WHERE語句中使用tableB來獲取更多條件 – BobSki

+0

然後,列出您需要的來自TableB(您需要實現的過濾或排序規則)所需的條件,作爲您的一部分題。否則,我們正在回答錯誤的問題。 –

1

簡單group byhaving條款應該工作:

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)