TSQL - случай - оценивает в?

Существует ли способ, в котором мы можем указать значения для оператора выбора? Ниже оператора не выполняется, потому что он думает 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
9
задан Gabriel McAdams 19 February 2010 в 22:44
поделиться

6 ответов

Не заключайте числа в квадратные скобки.

16
ответ дан 4 December 2019 в 06:41
поделиться

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

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
2
ответ дан 4 December 2019 в 06:41
поделиться

Используйте:

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 является числовым столбцом, просто удалите скобки. Тогда это должно сработать нормально. Скобки говорят серверу базы данных, что что-то является объектом базы данных, поэтому удалите их, чтобы они обрабатывались как литерал.

1
ответ дан 4 December 2019 в 06:41
поделиться

Используйте:

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}}
12
ответ дан 4 December 2019 в 06:41
поделиться

Попробуйте следующее:

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
3
ответ дан 4 December 2019 в 06:41
поделиться

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

1
ответ дан 4 December 2019 в 06:41
поделиться