SQL - Создание условного предложения Where для этого простого запроса - PullRequest
3 голосов
/ 08 марта 2012

Я пытался создать условное условие 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 ]

5 голосов
/ 08 марта 2012
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
2 голосов
/ 08 марта 2012

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

1 голос
/ 08 марта 2012
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 голосов
/ 08 марта 2012
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
...