TSQL - регистр - значения в? - PullRequest
9 голосов
/ 20 февраля 2010

Есть ли способ указать значения для оператора case? Вышеприведенный оператор не выполняется, потому что он думает, что 53,57,82,83 и т. Д. Являются столбцами .. Есть ли обходной путь ... Я погуглил, но не нашел ничего, что говорит, что вы не можете использовать выражение IN case-when ..

select 
x =
case 
    when xvalue in ([52],[57],[82],[83]) 
        then "xvalue"
    when yvalue in ([01],[02],[11]) 
        then "yvalue"
    else
        'NULL'
    end
from xyztable

Ответы [ 6 ]

16 голосов
/ 20 февраля 2010

Не ставьте скобки вокруг цифр.

12 голосов
/ 20 февраля 2010

Использование:

SELECT x = CASE 
             WHEN t.xvalue IN (52, 57, 82, 83) THEN 'xvalue'
             WHEN t.yvalue IN (01, 02, 11) THEN 'yvalue'
             ELSE NULL
           END
  FROM TABLE t

Предполагая, что вы хотите значение из столбца, используйте:

SELECT x = CASE 
             WHEN t.xvalue IN (52, 57, 82, 83) THEN t.xvalue
             WHEN t.yvalue IN (01, 02, 11) THEN t.yvalue
             ELSE NULL
           END
  FROM TABLE t

Вы понимаете, что если xvalue и yvalue находятся в группах, будет отображаться только значение xvalue?

3 голосов
/ 20 февраля 2010

Попробуйте это:

select 
case 
    when xvalue in (52,57,82,83) 
        then "xvalue"
    when yvalue in (01,02,11) 
        then "yvalue"
    else
        'NULL'
    end as 'x'

Если вы хотите использовать x, который, как я предполагаю, будет переменной, вы захотите определить ее следующим образом:

ОБЪЯВИТЬ @x int

select 
@x = case 
    when xvalue in (52,57,82,83) 
        then "xvalue"
    when yvalue in (01,02,11) 
        then "yvalue"
    else
        'NULL'
    end
2 голосов
/ 20 февраля 2010

Причина, по которой ваш запрос не работает, заключается в том, что он написан неправильно. Посмотрите на это:

in ([01],[02],[11])  

Помещение [] вокруг ваших значений означает, что вы хотите, чтобы они рассматривались как имена столбцов. Если вы удалите кавычки, то эта часть будет работать. Также посмотрите на это:

then "xvalue" 

здесь вам нужны одинарные кавычки.

else 'NULL'

Здесь вы хотите, чтобы значение было NULL или строка "NULL"? Как бы вы это ни написали, это будет строка «NULL»

Чтобы получить значение NULL, напишите это так:

else NULL

Здесь снова все написано правильно:

select    
x =   
case    
    when xvalue in (52,57,82,83)    
        then 'xvalue'
    when yvalue in (01,02,11)    
        then 'yvalue'
    else 'NULL'   
    end   
from xyztable
1 голос
/ 20 февраля 2010

В t-sql, [] идентификаторы предназначены для кавычек символов, таких как имена столбцов - вы можете иметь пробелы и всевозможные нечетные символы в именах столбцов, если вы действительно этого хотите. Используйте '' кавычки для цитирования строковых литералов.

1 голос
/ 20 февраля 2010

Конечно, если xvalue - числовой столбец, просто снимите скобки. Тогда все должно работать нормально. Скобки сообщают серверу базы данных, что что-то является объектом базы данных, поэтому удалите их, чтобы они рассматривались как литерал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...