TSQL и случай, когда с несколькими когда?

#tsql #case-when

#tsql #случай-когда

Вопрос:

У меня есть несколько условий, и результат для них должен быть одинаковым. Я искал в сети и нашел что-то вроде этого:

 CASE ProductLine
     WHEN 'R' THEN 'Road'
     WHEN 'M' THEN 'Mountain'
     WHEN 'T' THEN 'Touring'
     WHEN 'S' THEN 'Other sale items'
     ELSE 'Not for sale'
  END
  

Это хорошо, но не то, что мне нужно, для меня это больше похоже на то, что R, M, T и S имеют одинаковый результат, а A, B, C, D, например, не имеют. Как бы я это сделал? Я не могу подключиться к OR, или, по крайней мере, мне это не удалось :). Может быть, что-то вроде этого?

 CASE ProductLine
     WHEN 'R' OR 'M' OR ... THEN 'Road'
     ELSE 'Not for sale'
  END
  

Ответ №1:

Измените на «искомое» выражение РЕГИСТРА. У вас есть «простое» выражение случая выше

 CASE
   WHEN  ProductLine IN ('R', 'M', ...) THEN 'Road'
   ELSE 'Not for sale'
END
  

Из ссылки MSDN выше:

 Simple CASE expression: 
CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 

Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END
  

Комментарии:

1. Приятно! Кстати, почему выражение OR не является логическим выражением, это такой случай

2. @sll: SQL Server не поддерживает логическое выражение