Вставить в стол, кейс - PullRequest
       0

Вставить в стол, кейс

1 голос
/ 26 декабря 2011

Мне нужно вставить в новую таблицу (2 столбца) Отличное описание от другой таблицы и в случае второй строки.

Так как:

Insert into @Temp1
Select distinct description from Table1,
CASE
WHEN aaa then 1
When bbb then 2
END

Таким образом, в основном для каждого вставленного значения в первом столбце, во втором столбце идет одно из нескольких возможных значений, в зависимости от первого значения.

Возможно ли это?

Ответы [ 3 ]

3 голосов
/ 26 декабря 2011

Попробуйте сделать так:

Insert into @Temp1
Select distinct description,
CASE description
WHEN 'aaa' then 1
When 'bbb' then 2
END
 from Table1
3 голосов
/ 26 декабря 2011

Да, это возможно. Похоже, вы пропустили input_expression из вашего простого выражения CASE и у вас есть FROM в неправильном месте.

INSERT INTO @Temp1
SELECT DISTINCT description,
                CASE description
                  WHEN aaa THEN 1
                  WHEN bbb THEN 2
                END
FROM   Table1

Конечно, если aaa и т. Д. Являются константами, а не производными от других столбцов в Table1, так что второй столбец может быть детерминированно выведен из первого столбца (и он не будет изменен в будущих обновлениях) не может быть никакого смысла хранить его вообще. Вы можете определить переменную таблицы с помощью вычисляемого определения столбца или просто использовать выражение CASE, когда SELECT -ing из него.

Пример случая вычисляемого столбца

DECLARE @Temp1 TABLE (
  [description] VARCHAR(50),
  [calcColumnExample] AS CASE description
       WHEN 'aaa' THEN 1
       WHEN 'bbb' THEN 2
     END 
) 
2 голосов
/ 26 декабря 2011

В качестве альтернативы CASE вы также можете использовать соединение со встроенной таблицей, например:

SELECT DISTINCT
  t.Description,
  x.SpecialValue
FROM Table1 t
  INNER JOIN (
    SELECT 'aaa', 1 UNION ALL
    SELECT 'bbb', 2 UNION ALL
    …
  ) x (Description, SpecialValue) ON t.Description = x.Description
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...