Оператор IN в выражении результата в выражении CASE THEN - PullRequest
3 голосов
/ 02 марта 2010

Можно ли использовать IN в CASE..THEN?

WHERE
   record.field =
      CASE
          WHEN @flag = 1 THEN a
          WHEN @flag = 2 THEN IN (b, c)
      END

Или как переписать такое условие?

Ответы [ 2 ]

6 голосов
/ 02 марта 2010

Извините, нет:

WHERE
    (@flag = 1 AND record.field = a)
    OR
    (@flag = 2 AND record.field IN (b, c))
4 голосов
/ 02 марта 2010

попробовать:

WHERE (@flag = 1 AND record.field = a )
    OR (@flag = 2 AND record.field IN (b, c))

может быть лучше попытаться присоединиться к значению и использовать индекс:

DECLARE @Table (ValueOf  int)
INSERT INTO @Table ((ValueOf)
    SELECT a WHERE @flag = 1
    UNION SELECT b WHERE @flag = 2
    UNION SELECT c WHERE @flag = 2

SELECT
    ....
    FROM ...           x
    INNER JOIN @Table  t ON x...=t.ValueOf  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...