Существует ли способ, в котором мы можем указать значения для оператора выбора? Ниже оператора не выполняется, потому что он думает 53,57,82,83, и т.д. столбцы.. Есть ли вокруг работа.. я погуглил, но ничего не нашел, что говорит, что Вы не можете использовать В случае - когда выражение..
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
Причина, по которой ваш запрос не работает, в том, что он написан неправильно. Посмотрите на это:
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
Используйте:
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?
-121--3221175-Если вы собираетесь использовать C # для своей разработки, то вот одна важная вещь, которую будет иметь следующая версия рамки и C #; Динамические типы:
Из блога Скотта Хансельмана :
C # 4 (не 4,0, маркетологи говорят, что это .NET 4 и т. д.) добавляет ключевое слово dynamic . Я объяснил эту поговорку:
«У вас или у меня нет пути узнать тип этого сейчас, компилятор, так что будем надеяться, что среда выполнения вычислит его».
Ключевой пункт здесь, жирным шрифтом, потому что это важно: , имеющий тип динамический означает «использовать мой тип выполнения для привязки» .
Это что-то сильно отличается от текущей версии C # и может иметь некоторые довольно значимые способы написания кода. Так скрытая во всей хупле, новая структура действительно имеет некоторую добавленную стоимость по сравнению с текущими рамками.
Надеюсь, что это поможет некоторым.
-121--4817642-Если xvalue является числовым столбцом, просто удалите скобки. Тогда это должно сработать нормально. Скобки говорят серверу базы данных, что что-то является объектом базы данных, поэтому удалите их, чтобы они обрабатывались как литерал.
Используйте:
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?
{{ 1}}Попробуйте следующее:
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, который, как я предполагаю, будет переменной, вы захотите определить ее следующим образом:
DECLARE @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
В t-sql []
идентификаторы используются для цитирования символов, таких как имена столбцов - вы можете использовать пробелы и всевозможные странные символы в именах столбцов, если вам это действительно нужно. Используйте ''
кавычки для цитирования строковых литералов.