SQL - 为此简单查询创建条件Where子句

时间:2012-03-08 12:05:01

标签: sql case where-clause case-statement

我一直在尝试为下面的查询创建条件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的结果。

非常感谢任何帮助!

由于

4 个答案:

答案 0 :(得分:5)

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 :(得分:2)

我不确定,但如果我理解正确的话: ... AND eveworkflowID < @WFStatus * 100

答案 2 :(得分: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之间的情况,这是默认情况所涵盖的。

答案 3 :(得分: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