2016-08-24 12 views
0

2つのテーブル、つまりtableAtableBの内部結合を行うための情報を提供するためにクエリを作成しようとしています。ここでは、彼らがどのように見えるかです:SQL Server:Select 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 

ここで私がやろうとしているものです。私はどちらか1,2を持つことができ、それらの個別のクライアントを選択しようとしているが、3

を持つことはできません - 私がやろうとしている...

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

RevPurpは1,2,3することができ

は、クライアント123は、クライアントがRevPurp 3があれば、私はときに、クライアントを表示したくないRevPurp 3.ので、持っているので、私は1つのだけのレコード....

124 

を持っている必要があり、テーブル内のデータを見ます私はクエリを実行する!

EDIT - ACTIVEと呼ばれるTableBにフィールドを追加しました。私は質問をするときにActive = Trueを確認する必要があります!

+6

私はTableBの目的を見ることができません。あなたは必要な結果をTableA –

+0

@devlincarnateから得ることができます。なぜなら、WHEREフィルタが入っているのでテーブルを使う必要があります。 – BobSki

+2

@Bobski:どのような 'where'フィルタ? 'TableB'には何もありません。あなたがいくつかの詳細を省略していない限り。 – sstan

答えて

1

ではない試すことができます

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

ahhレコードに3がある場合、clientIdは必要ありません。 。 –

+0

WHEREステートメントでより多くの基準にtableBを使用する必要があるため、TableB内部Join to TableAを選択する必要があります。 – BobSki

+0

TableB(必要なフィルタリングルールまたはソートルール)から必要な条件をリストします。質問。それ以外の場合は間違った質問に答えています。 –

1

having句を持つシンプルなgroup by作業をする必要があります:あなたはコメントで述べた@devlinとして

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) 
1

、あなたはこれを行うにはTABLEBは必要ありません。 RevAの値が3のtableAにレコードが存在しないTableAの一意の(別個の)ClientIdのリストが必要です。

EDIT:aフィルター述部のディングは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)