2016-12-16 4 views
1

値を下にドロップダウンしました:AllScheduledCompleteおよびIn Progressです。今度はAllを使用してフィルタリングしますが、scheduleを除外します。SQL Server 2008のcaseステートメントの値を除外

すべてのスケジュール除外する方法
tClientInteractions.FollowUpStatus =  
case @ScheduledStatus 
when 'All' then ('Complete','In Progress') 
else @ScheduledStatus 
end 

:私は、次のようCASE式を使用しています。私はCASE表現を使用することはありません

IF @ScheduledStatus = 'All' 
BEGIN 
    tClientInteractions.FollowUpStatus = Your_Statement 
    WHERE Your_Condition 
END 
ELSE 
    tClientInteractions.FollowUpStatus = @ScheduledStatus 
    WHERE Your_Condition 
+1

を使用して一つの方法であるあなたは、この上で展開することができますか?サンプルデータと期待される出力を提供できますか? –

+0

私はFollowUpStatusというフィールドを持っていて、Scheduled、complete、およびIn progressの値を保持しています。今私はすべてを使用してフィルタリングしたいと思っています。 – AB4U

+0

このコードがWHERE句にあると仮定すると、CASEの使用を避けたいのですが、私は別の答えとして代替を提供しました。 –

答えて

1

+0

ですが、rich..iはtable.soの 'All'値を持っていないので、どのように完全なものと進捗レコードだけをフィルタリングしますか? – AB4U

+0

ロジックの最初の部分は、パラメータがテーブルではなく「すべて」に設定されているかどうかを確認することです。パラメータ= 'All'の場合、FollowUpStatusが 'Scheduled'でないテーブルからすべてを返します。ロジックの2番目の部分では、パラメータが 'All'(特定の値を選択したことを意味します)でない場合、FollowUpStatus =パラメータ内の値の行のみを返します。 –

+0

@ AB4U私は私の答えをさらに説明しようとするために広げました。まだ質問がある場合は教えてください。 –

0

代替方法は、あなたの結果を達成します。このようなものを試してみてください。あなたはparameterとして'All'を渡すと、それはそれ以外の場合は、通過の値を返すために起こっている、'Scheduled'でないこと、すべてのFollowUpStatusを返すことであること

WHERE (@ScheduledStatus = 'All' AND FollowUpStatus <> 'Scheduled') 
OR @ScheduledStatus = FollowUpStatus 

ロジック。

この利点は、パフォーマンスに役立つWHERE節で計算していないことです。

これを解消するには。

ここ
WHERE (@ScheduledStatus = 'All' AND FollowUpStatus <> 'Scheduled') 

parameterは、あなたが'Scheduled'ないFollowUpStatusからすべてを返すようにしたいとあなたは「すべて」を渡す場合。

OR @ScheduledStatus = FollowUpStatus 

これは、あなたがparameterとして'All'を渡さない場合、あなたは別の値('Scheduled''Complete'または'In Progress')を選んだしなければならないと述べています。 FollowUpStatusがこの値と等しいレコードのみを返します。ここで

0

AND/ORロジック

WHERE (tClientInteractions.FollowUpStatus IN ('Complete', 'In Progress') 
     AND @ScheduledStatus = 'All') 
     OR (tClientInteractions.FollowUpStatus = @ScheduledStatus)