2012-03-08 2 views
2

Я пытаюсь создать условие conditional where для моего запроса ниже, но я вижу, что так много альтернатив, я не уверен, что использовать в этом случае.SQL - Создание условного предложения Where для этого простого запроса

Что мне нужно что-то вдоль линий этого: (хотя, конечно, этот код неверно)

where casCaseType='m' 
    and casCurrentWorkflowID=990 
    and cmsDateCreated between @FromDate and @ToDate 

CASE @WFStatus 
     WHEN @WFStatus=1 then eveworkflowID<100 
     WHEN @WFStatus=2 then eveworkflowID<200 
     WHEN @WFStatus=3 then eveworkflowID<300 
     WHEN @WFStatus=4 then eveworkflowID<400 
ELSE 0 
END 

Поэтому, когда я выбираю параметр WFStatus как 1, он будет автоматически включается, что раздел WHERE что приводит к результатам только с результатами eveworkflowID, которые составляют менее 100.

Любая помощь была бы принята с благодарностью!

Благодаря

+1

Я предполагаю, что «и eveworkFlowID <@ WFStatus * 100» не сделал бы это? – Glenn

ответ

4
WHERE casCaseType='m' 
    AND casCurrentWorkflowID=990 
    AND cmsDateCreated between @FromDate and @ToDate 

    AND eveworkflowID < 
     CASE @WFStatus 
     WHEN 1 THEN 100 
     WHEN 2 THEN 200 
     WHEN 3 THEN 300 
     WHEN 4 THEN 400 
     ELSE 0 
     END 
1

Я не уверен, но если я правильно понимаю: ... AND eveworkflowID < @WFStatus * 100

1
where casCaseType='m' 
    and casCurrentWorkflowID=990 
    and cmsDateCreated between @FromDate and @ToDate 
    and (@WFStatus BETWEEN 1 AND 4 AND eveworkflow < @WFStatus * 100) 

EDIT
Не возражаю дело, что @WFStatus не между 1 и 4, на который распространяется ваш случай по умолчанию.

0
where casCaseType='m' 
and casCurrentWorkflowID=990 
and cmsDateCreated between @FromDate and @ToDate 

    CASE eveworkflowID< 
    WHEN @WFStatus=1 then 100 
    WHEN @WFStatus=2 then 200 
    WHEN @WFStatus=3 then 300 
    WHEN @WFStatus=4 then 400 
ELSE 0 
END