19

次のようなクエリがあります。

DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION 
IF @tmpValue > 0 
SELECT * FROM Animal WHERE.Active = 0

このように使用すると、if条件のためにエラーが発生します。構造上、UNION を使用する必要があります。

if 条件でどのように使用できますか?

ありがとう、
ジョン

4

4 に答える 4

30

次のように条件@tmpValue > 0WHERE句に移動します。

SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE @tmpValue > 0 AND Active = 0
于 2012-11-01T12:23:05.387 に答える
4

Query に条件を入れる最良の方法は CASE ステートメントです。query にはいくつでも条件を入れることができます。CASE ステートメントは、条件付きフィルターを Query に入れるために使用されます。

EX用。

DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal 
WHERE 
1 = CASE WHEN @tmpValue  = 0 THEN 0 ELSE Active = 1 END

あなたの状況はそれほど複雑ではありませんが、より複雑な条件では、ネストされた CASE ステートメントを Query で使用できます。

于 2012-11-01T18:32:43.473 に答える
3

このようにクエリに条件を追加できます。テスト条件が false の場合、ユニオンのセクション部分は単に結果を返しません。

DECLARE @tmpValue

SET @tmpValue = 0 -- it will be change 

SELECT * FROM Animal WHERE AniActive = 1
UNION 
SELECT * FROM Animal WHERE.Active = 0 and @tmpValue > 0
于 2012-11-01T12:24:59.020 に答える
0

UNION を完全に取り除くことでコードを簡素化する方法を次に示します。私は常に、可能な限りシンプルなソリューションを好みます。これは、(潜在的に) 2 回ではなく 1 回だけスキャンするため、select がテーブル スキャンを実行する場合にもパフォーマンスが向上します。

DECLARE @tmpValue

SET @tmpValue = 0 -- it will be change

SELECT * FROM Animal WHERE AniActive = 1 OR @tmpValue > 0
于 2012-12-05T21:56:42.940 に答える