2016-12-05 18 views
0

有効なクエリを作成して、1つ以上の値が列内に10以上あるかどうかを判断するにはどうすればよいですか。私は値を数えることができることを認識していますが、これはすべてのレコードをスキャンします。ここで私はこれまで持っているものです。条件を満たす値があるかどうかを確認する

SELECT COUNT(*) FROM MyTable WHERE [state] = 12 AND age > 110 

私はそれを110テーブル全体をスキャンしていない上に第一の人を見つけたときに、このクエリを停止したいです。これは可能ですか?

+0

したがって、停止するたびにカウントは1になるでしょうか? – scsimon

+0

@scsimon私は、州12に110歳以上の人がいるかどうかを知りたいだけです。私はカウントが必要ありません。 – Luke101

+0

次に、1を選択するか、同じwhere句で 'true'を選択します。これにより、集約費用が節約されます。これをEXISTS – scsimon

答えて

3

にマッチします:

SELECT TOP 1 1 as row_exists 
FROM MyTable 
WHERE [state] = 12 AND age > 110; 

あなたが使用して1またはNULLを返すためにサブクエリを使用することができますこれは、サブクエリとして:

SELECT (SELECT TOP 1 1 FROM MyTable WHERE [state] = 12 AND age > 110 
     ) as row_exists; 

あなたが使用してT-SQLにこれを置くことができます。

IF (EXISTS (SELECT 1 FROM MyTable WHERE [state] = 12 AND age > 110)) 
BEGIN 
    . . . 
END; 

TOPサブクエリのEXISTSでは不要です。

私はそれがあなたのために便利ですが、テストを試すことができます天気を確認していない
2

スカラー値のブール値を取得しますか?存在は非常に一度、任意の行には、このクエリを使用して1または全く行を返すためにサブクエリを使用することができます条件

DECLARE @Result bit = 
    (SELECT CASE WHEN EXISTS(SELECT * FROM MyTable WHERE [state] = 12 AND age > 110) THEN 1 ELSE 0 END) 
+1

btwについて、' SELECT * 'を使って 'EXISTS'の' SELECT 1'と同じことをしていると思います。http://stackoverflow.com/questions/1597442 /サブクエリを使用して存在する、または存在する – Eric

0

たとえばあなたが、結果セットの行数は、あなたのトップ100のベースを使用することができます100 であるかを決定したいことができますステートメント。 信号の結果の行が100より大きい場合は、@@ ROWCOUNTがtrueになります。

SELECT TOP 100 FROM MyTable WHERE [state] = 12 AND age > 110 
IF @@ROWCOUNT=100 
    PRINT 'True' 
ELSE 
    PRINT 'Flase' 
関連する問題