Как установить локальную переменную с помощью оператора CASE - PullRequest
0 голосов
/ 03 июля 2018

Позвольте мне начать со слов: «Я уверен, что есть более простой способ сделать это, но я не могу его найти ...»

Я пытаюсь создать номер отслеживания на основе 4 отдельных значений в записи, чтобы я мог объединить переменные и вставить эту объединенную строку в другую таблицу.

DECLARE @fy char = '';
SET @fy = (SELECT proposalCallID,
                CASE
                    WHEN proposalCallID IN (7, 8) THEN '19'
                    WHEN proposalCallID IN (5, 6) THEN '18'
                END
            FROM proposalPackage WHERE proposalCallID = 15)

Я получаю сообщение об ошибке «В списке выбора можно указать только одно выражение, если подзапрос не введен с EXISTS.»

В отслеживаемом номере 4 части, поэтому у меня 4 из этих запросов, необходимо объединить части, чтобы получить полный номер отслеживания.

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Это то, что вы пытаетесь сделать?

DECLARE @fy char(2) = '';

SELECT @fy = (CASE WHEN proposalCallID IN (7, 8) THEN '19'
                   WHEN proposalCallID IN (5, 6) THEN '18'
              END)
FROM proposalPackage
WHERE proposalCallID = 15;

Обратите внимание на спецификацию длины для @fy, поэтому значение подходит. Всегда использовать спецификацию длины с символами в SQL Server.

Учитывая логику, вы можете полностью отказаться от установки значения. Значение, возвращаемое выражением CASE, равно NULL, поэтому:

DECLARE @fy char(2);

Имеет точно такой же эффект.

0 голосов
/ 03 июля 2018

Если я правильно понимаю, у вас есть один запрос для каждой из 4 частей строки?

SET @fy = (query1) + (query2) + (query3) + (query 4)
0 голосов
/ 03 июля 2018

Вы выбираете 2 столбца (т. Е. Несколько значений) в своем запросе, но пытаетесь объединить их в одну переменную значения.

Ваш запрос выбирает сам proposalCallID, а затем другой столбец, который генерирует оператор CASE. Поэтому результирующий набор будет включать два столбца. SQL Server не может хранить два столбца в одной переменной. Вот что вызывает вашу ошибку.

Попробуйте вместо этого:

DECLARE @fy VARCHAR(10) = '';
SELECT @fy = CASE
                    WHEN proposalCallID IN (7, 8) THEN '19'
                    WHEN proposalCallID IN (5, 6) THEN '18'
                    ELSE ''
                END
FROM proposalPackage
WHERE proposalCallID = 15;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...