2012-03-08 52 views
2

我一直在尝试为下面的查询创建一个条件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,它会自动接合其中的那款子句只会带出eveworkflowID小于100的结果。

任何帮助将不胜感激!

感谢

+1

我假设“和eveworkFlowID <@ WFStatus * 100”不会这样做吗? – Glenn 2012-03-08 12:09:17

回答

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) 

编辑
不介意的情况下@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