2017-11-24 3 views
1

SSMSでSQLクエリを実行しようとしていますが、別のテーブルに存在するterminalIDの行数を返しますが、レコードが2015より大きいが、エラー。ここに私の質問です:SQL Server - 他のテーブルから複数の条件を含むステートメントを選択

select count(*) 
from AuditTerminal(nolock) 
where TerminalID in (Select TerminalID from Terminal) 
    and (select * from Terminal where LastChangeDate >= '2015-01-01') 

条件が成功するように最後の行を置く方法はありますか?

EDIT:これはどうですか?

select * 
from AuditTerminal(nolock) 
where TerminalID in (select TerminalID from Terminal) 
    and exists (select * from Terminal where LastChangeDate >= '2015-01-01') 

答えて

3

観光:

はあなたが同じテーブル上の2つの条件を入れているので、私はあなたが2015年1月01後ターミナルテーブルに存在するすべての端末を見つける必要があるとAuditTerminalでもあることを前提としています。したがって、それらを単一の照会に入れてください。

select count(*) 
from AuditTerminal(nolock) 
     where TerminalID IN 
(Select TerminalID from Terminal where LastChangeDate>= '2015-01-01') 

また、我々はもう少し理にかなっているJOINを使用することができます(少なくとも私には;))

select count(*) 
from AuditTerminal (nolock) as A 
INNER JOIN Terminal (nolock) as T 
on T.TerminalID =A.TerminalID 
     AND T.LastChangeDate>= '2015-01-01' 

そして、あなたはユニークな数を探している場合

代わり count(DISTINCT TerminalID)を使用してください
+0

文をジョインを使用せずに、他の選択肢はありますか? –

+0

これはどうですか?私の編集された投稿を参照してください –

+0

私はそれほど複雑ではないので、最初の方法を使用することをお勧めします:) –

1

EXISTSも使用できます。

クエリ

select count([TerminalID]) as [TerminalID_count] 
from [AuditTerminal] at 
where exists(
    select 1 from [Terminal] t 
    where at.[TerminalID] = t.[TerminalID] 
    and t.[LastChangeDate] >= '2015-01-01' 
); 
+0

私の編集した記事を表示 –

関連する問題