【问题标题】:SQL - Creating A Conditional Where Clause For This Simple QuerySQL - 为这个简单查询创建条件 Where 子句
【发布时间】:2012-03-25 22:03:56
【问题描述】:

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

任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 我假设“and eveworkFlowID

标签: sql case where-clause case-statement


【解决方案1】:
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

【讨论】:

    【解决方案2】:
    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】:
      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
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 2011-12-03
          • 2014-06-20
          • 2020-05-31
          相关资源
          最近更新 更多