我有一个值下拉列表:All
,Scheduled
,Complete
和In Progress
。现在我想使用All
进行过滤,但希望在其中排除schedule
。我使用以下CASE
表达式:
tClientInteractions.FollowUpStatus =
case @ScheduledStatus
when 'All' then ('Complete','In Progress')
else @ScheduledStatus
end
如何从全部排除预定。
答案 0 :(得分:1)
我不会使用CASE
表达式。试试这样的事情;
WHERE (@ScheduledStatus = 'All' AND FollowUpStatus <> 'Scheduled')
OR @ScheduledStatus = FollowUpStatus
逻辑是,如果您将'All'
作为parameter
传递,那么它将返回不是FollowUpStatus
的所有'Scheduled'
,否则它会返回WHERE
将返回通过的值。
这样做的好处是,您不会在WHERE (@ScheduledStatus = 'All' AND FollowUpStatus <> 'Scheduled')
条款中计算出有助于提升效果的条款。
要打破这一点;
parameter
在这里,如果你通过了所有&#39;作为FollowUpStatus
,您希望返回'Scheduled'
的所有内容,而不是OR @ScheduledStatus = FollowUpStatus
。
'All'
然后,如果您未将parameter
作为'Scheduled'
传递,那么您必须选择不同的值('Complete'
,'In Progress'
或{{ 1}})。仅返回FollowUpStatus
等于此值的记录。
答案 1 :(得分:0)
实现结果的替代方式:
IF @ScheduledStatus = 'All'
BEGIN
tClientInteractions.FollowUpStatus = Your_Statement
WHERE Your_Condition
END
ELSE
tClientInteractions.FollowUpStatus = @ScheduledStatus
WHERE Your_Condition
答案 2 :(得分:0)
以下是使用AND/OR
逻辑
WHERE ( tClientInteractions.FollowUpStatus IN ( 'Complete', 'In Progress' )
AND @ScheduledStatus = 'All' )
OR ( tClientInteractions.FollowUpStatus = @ScheduledStatus )